2016-06-01 2 views
1

Для каждой строки, кроме первой строки в моем файле, я хочу проверить, существует ли строка. Если да, то ничего не делайте. В противном случае, добавьте строку в строкуЗаменить строку другой подстрокой с помощью sed в сценарии оболочки

Для экс - есть Фолля 3 строки в моем файле

line1 : do_not_modify 

line2-string-exists 

line3 

Я хочу добавить -string-exists только те строки в файле, который не имеет, что строка добавляется к их (Игнорировать первую строку)

выход должен быть -

line1 : do_not_modify 

line2-string-exists 

line3-string-exists 

Пожалуйста, скажите мне, как я буду делать это с помощью sed? Или это возможно сделать с awk?

+2

Возможно решить проблему с 'sed' или' awk'. что ты уже испробовал? –

ответ

4
$ cat data 
line1 : do_not_modify 
line2-string-exists 
line3 

$ sed '1!{/-string-exists/! s/$/-string-exists/}' data 
line1 : do_not_modify 
line2-string-exists 
line3-string-exists 

или с помощью awk:

$ awk '{if(NR!=1 && ! /-string-exists/) {printf "%s%s", $0, "-string-exists\n"} else {print}}' data 
line1 : do_not_modify 
line2-string-exists 
line3-string-exists 
+0

Спасибо! в моей команде отсутствовали фигурные скобки. Сейчас он работает – Manisha

1

Вы можете использовать эту команду: sed

sed -E '/(do_not_modify|-string-exists)$/!s/$/-string-exists/' file 

line1 : do_not_modify 
line2-string-exists 
line3-string-exists 

Или с помощью awk:

awk '!/(do_not_modify|-string-exists)$/{$0 = $0 "-string-exists"} 1' file 
+2

Я не думаю, что «do_not_modify» действительно присутствует во входном файле. –

+1

Да, может быть, OP бы хотел 'awk 'NR> 1 &&!/- string-exists $/{$ 0 = $ 0" -string-exists "} 1' file' – anubhava

0

Предполагая, что строка не содержит метасимволов RE:

$ awk 'BEGIN{s="-string-exists"} (NR>1) && ($0!~s"$"){$0=$0 s} 1' file 
line1 : do_not_modify 
line2-string-exists 
line3-string-exists 
Смежные вопросы