Сочетание эха и кота в Unix - PullRequest
31 голосов
/ 09 июня 2010

Действительно простой вопрос, как мне объединить echo и cat в оболочке, я пытаюсь записать содержимое файла в другой файл с добавленной строкой?

Если / tmp / file выглядит так:

this is a test

Я хочу запустить это:

echo "PREPENDED STRING"
cat /tmp/file | sed 's/test/test2/g' > /tmp/result 

так что / tmp / result выглядит так:

PREPENDED STRINGthis is a test2

Спасибо.

Ответы [ 6 ]

38 голосов
/ 09 июня 2010

Это должно работать:

echo "PREPENDED STRING" | cat - /tmp/file | sed 's/test/test2/g' > /tmp/result 
11 голосов
/ 09 июня 2010

Попробуйте:

(printf "%s" "PREPENDED STRING"; sed 's/test/test2/g' /tmp/file) >/tmp/result

В скобках команды запускаются внутри подоболочки, поэтому выходные данные выглядят как один поток для перенаправления >/tmp/result.

2 голосов
/ 09 июня 2010

Или просто используйте только sed

  sed -e 's/test/test2/g
s/^/PREPEND STRING/' /tmp/file > /tmp/result
1 голос
/ 26 апреля 2013

Если это когда-либо для отправки электронной почты, не забудьте использовать CRLF, например:

echo -e 'To: cookimonster@kibo.org\r' | cat - body-of-message \
| sed 's/test/test2/g' | sendmail -t

Обратите внимание на флаг -e и \ r внутри строки.

Настройка To: этот цикл дает вам самый простой в мире пакет рассылки.

1 голос
/ 09 июня 2010

Или также:

{ echo "PREPENDED STRING" ; cat /tmp/file | sed 's/test/test2/g' } > /tmp/result
0 голосов
/ 09 июня 2010

Другой вариант: при условии, что предварительно добавленная строка должна появляться только один раз, а не для каждой строки:

gawk 'BEGIN {printf("%s","PREPEND STRING")} {gsub(/test/, "&2")} 1' in > out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...