Ответ 1
sed -i 's/WORD1.*WORD3/WORD1 foo WORD3/g' file.txt
или
sed -i 's/(WORD1).*(WORD3)/\1 foo \2/g' file.txt
Вам может понадобиться избежать круглых скобок, в зависимости от вашего варианта sed.
У меня есть файл со следующим содержимым:
WORD1 WORD2 WORD3
Как я могу использовать sed для замены строки между WORD1 и WORD3 на foo
, чтобы содержимое файла было изменено на следующее?:
WORD1 foo WORD3
Я пробовал следующее, но, очевидно, я что-то пропустил, потому что это не дает желаемых результатов:
sed -i '' 's/WORD1.*WORD3/foo/g' file.txt
sed -i 's/WORD1.*WORD3/WORD1 foo WORD3/g' file.txt
или
sed -i 's/(WORD1).*(WORD3)/\1 foo \2/g' file.txt
Вам может понадобиться избежать круглых скобок, в зависимости от вашего варианта sed.
Это может сработать для вас:
sed 's/\S\+/foo/2' file
или, возможно:
sed 's/[^[:space:]][^[:space:]]*/foo/2' file
Если WORD1
и WORD3
встречаются более одного раза:
echo "WORD1 WORD2 WORD3 BLA BLA WORD1 WORD4 WORD3" |
sed 's/WORD3/\n&/g;s/\(WORD1\)[^\n]*\n/\1 foo /g'
WORD1 foo WORD3 BLA BLA WORD1 foo WORD3
содержание образца file.txt
$ cat file.txt
WORD1 WORD2 WORD3
WORD4 WORD5 WORD6
WORD7 WORD8 WORD9
(Исправление @DennisWilliamson в комментарии) $ sed -e 's/\([^ ]\+\) \+\([^ ]\+\) \+\(.*\)/\1 foo \3/' file.txt
WORD1 foo WORD3
WORD4 foo WORD6
WORD7 foo WORD9
while awk
как-то проще
$ awk -F' ' '{ print $1" foo "$3 }' file.txt
WORD1 foo WORD3
WORD4 foo WORD6
WORD7 foo WORD9