2014-01-28 3 views
0

Пример,Добавление персонажа перед линией, которая, имеющей определенную строку

У меня есть тестовый файл с тремя линиями, как

Tell:you are the one 
Great! that helped me 
you:me are the one to go 

В этом файле я хотел искать строку «вам: меня», после того, как найти его, он должен добавить # перед ним

который был бы как этот

Tell:you are the one 
Great! that helped me 
#you:me are the one to go 

Заранее спасибо

+0

Я вижу только одну строку. Я отредактирую одну возможную три строки, но теперь я не могу понять, что вы имеете в виду. – Noctua

ответ

0

Вот альтернатива awk, только потому, что:

awk '/you:me/ { print "#"$0 }' 
1

вы можете просто сделать это с помощью регулярных выражений:

sed 's/^you:me/#you:me/' thefile.txt 

я предположил здесь, что you:me всегда в начале строки, в противном случае, если вы хотите, чтобы соответствовать всем you:me S:

sed 's/you:me/#you:me/g' thefile.txt 
+0

Спасибо за ваш ответ .. Но я пытаюсь добавить его в тот же файл, я не могу этого сделать .. Это то, что я получаю [10:23:00 host]> sed 's/^ you: me/#you: me/'append_file Скажите: вы один Отлично! что помогло мне #you: я должен идти [10:23:23 host]> sed 's/^ you: me/# you: me /' append_file [10:23:42 host]> cat append_file Скажите: вы один Отлично!что помогло мне вы: я должен пойти [10:23:48 host]> sed 's/^ you: me/# you: me /' append_file> append_file [10:24:00 host]> cat append_file [10:24:02 host]> ls -ltr append_file -rwxr-xr-x 1 aselvan engr 0 Янв 28 10:24 append_file [10:24:08 host]> –

+0

пробовал использовать sed -i " Но не повезло «моя версия ОС - sunOS 5.10 –

+0

извините, но я не получаю то, что вы вставили ... можете ли вы отформатировать ее в своем вопросе? – zmo

1

Использование

патч в
sed 's/you:me/#&/' file 
1

в другой answe rs предложил, я бы использовал sed. Однако, если вы ищете для чистого раствора Баша, используйте:

while read line; do 
    if [[ "$line" == "you:me"* ]]; then 
     echo "#$line" 
    else 
     echo "$line" 
    fi 
done 

Как было предложено chepner, вы могли бы заменить, если структуру с замещением Баша:

while read line; do 
    echo "${line/#you:me/#you:me} 
done 

Как объяснены в comment: Первый хеш - это флаг, указывающий, что совпадение должно быть в начале $line, второе - литеральный хеш, который мы хотим разместить перед линией.

+1

Вы можете свести выражение 'if' к избыточному виду« echo »$ {line/# you: me/# you: me}" ' , Первый символ # # привязывает совпадение к началу строки; второй символ '#' является буквальным символом в тесте замены. – chepner

+0

Конечно, почему я не думал о подстановках bash. Я добавлю это, спасибо. – Noctua

1

Я хотел бы сделать:

sed '/you:me/s/^/#/' 

это найти строку, содержащую you:me, независимо от того, что в начале или в середине, добавить # в начале строки

так

foo you:me bar -> #foo you:me bar 
you:me foo -> #you:me foo 
Смежные вопросы