Inserindo string de xargs em outra string

4

Digamos que eu tenha algum comando que produza um monte de strings. A saída desse comando pode ser algo como:

...
foo
bar
blargh
...

Digamos que eu tenha uma string definida

myString$Blah

Eu quero inserir cada uma das strings onde o $ está na saída do comando, de modo que acabe com um arquivo que se pareça com isto:

...
myStringfooBlah
myStringbarBlah
myStringblarghBlah
...

Qual é a maneira mais fácil de conseguir isso? (Awk e sed preferido)

    
por well actually 16.03.2012 / 21:34

3 respostas

7

Você nem precisa de sed ou awk .

xargs pode fazer isso: com: -L1 -I '$' echo 'myString$Blah'

$ cat x.list
foo
bar
blargh
$ cat x.list | tr '\n' '
$ cat x.list
foo
bar
blargh
$ cat x.list | tr '\n' '%pre%' | xargs -0 -L1 -I '$' echo 'myString$Blah'
myStringfooBlah
myStringbarBlah
myStringblarghBlah
' | xargs -0 -L1 -I '$' echo 'myString$Blah' myStringfooBlah myStringbarBlah myStringblarghBlah
    
por 20.03.2012 / 22:11
1

Você pode fazer isso completamente no shell ( bash , pelo menos) sem muita dificuldade. Aqui está um script que faz isso:

#!/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

Supondo que esse script seja chamado de script e você tenha um arquivo chamado in.txt com uma string por linha, a execução de script in.txt out.txt forneceria a saída desejada em out.txt .

    
por 17.03.2012 / 01:03
1

Supondo que você pode usar a string de formato myString&Blah , com um "e" comercial em vez do cifrão, canalize sua saída para isso:

sed "s/.*/$format/"

Isso funciona porque o & é usado como um operador "inserir correspondência aqui" na cadeia de substituição. A regex corresponde à linha inteira, portanto, ela inserirá a linha inteira no & .

É importante usar as aspas duplas para permitir a expansão da string de formato.

Se você realmente precisa usar oe comercial, use:

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

As cotações em torno do $ format são importantes se você tiver espaços em branco na string.

    
por 16.03.2012 / 22:43

Tags