Xargs'ten başka bir dizeye dize ekleme


5

Diyelim ki bir avuç dizge çıkaran bir emir var. Bu komutun çıktısı şuna benzeyebilir:

...
foo
bar
blargh
...

Diyelim ki bazı dizgem var

myString$Blah

$ Komutunun çıktısının bulunduğu dizelerin her birini, şöyle görünen bir dosyayla bitecek şekilde eklemek istiyorum:

...
myStringfooBlah
myStringbarBlah
myStringblarghBlah
...

Bunu başarmanın en kolay yolu nedir? (Awk ve sed tercih edildi)

Yanıtlar:


9

Hatta gerek yok sedya awk.

xargs bunu yapabilirsiniz: with: -L1 -I '$' echo 'myString$Blah'

$ cat x.list
foo
bar
blargh
$ cat x.list | tr '\n' '\0' | xargs -0 -L1 -I '$' echo 'myString$Blah'
myStringfooBlah
myStringbarBlah
myStringblarghBlah

1

Bunu tamamen kabuğun içinde ( bashen azından) çok fazla sorun yaşamadan yapabilirsiniz. İşte bunu yapan bir script:

#!/bin/bash

pattern="$1"
input_file="$2"
output_file="$3"

saved_IFS="$IFS"
IFS=$'\n'
# Store each line of the input file into an array named 'lines'.
lines=($(< $input_file))
IFS="$saved_IFS"

# Truncate output file, if any.
cat /dev/null > $output_file

# Substitute each line into the pattern, and write to output file.
for ln in "${lines[@]}"
do
  echo ${pattern/$/$ln} >> $output_file
done

Bu komut dosyasını farz denir scriptve adında bir dosya var in.txto zaman çalışan her satırda bir dize ile script in.txt out.txtsize istenen çıktıyı verecek out.txt.


1

Biçim dizesini myString&Blahdolar işareti yerine ve işareti ile kullanabileceğinizi varsayarsak çıktınızı şunun içine aktarın:

sed "s/.*/$format/"

Bu işe yarar çünkü &değiştirme dizesinde "buraya buraya eşleşen ekle" işleci olarak kullanılır. Regex tüm çizgiyle eşleşir, böylece bütün çizgiyi de konumuna yerleştirir &.

Format dizesinin genişletilmesine izin vermek için çift tırnak kullanılması önemlidir.

Ve işareti kullanmanız gerekiyorsa, şunu kullanın:

sed "s/.*/$(echo "$format" | tr '$' '&')/"

$ Format etrafındaki tırnak işaretleri, dizede boşluk varsa, önemlidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.