2015-02-12 2 views
0

У меня есть следующий файл:добавить признаки трубы вокруг каждого слова в файле

aaaa 
bbbb 
aaaabbbb 

, и я хотел бы иметь следующий поток вывода:

|aaaa| 
|bbbb| 
|aaaabbbb| 

Я попытался с помощью:

for i in aaaa bbbb aaaabbbb 
do 
awk '{ sub ("${i}", "|"${i}"|", $1 }1' input 
done 

Но я не получаю желаемый результат. Подсказка: Спасибо.

+0

У меня есть следующий файл путает меня .. –

+1

Может линия есть пробел в нем? Предположим, что строка 4 была «несколькими словами на строке»; каков желаемый результат? В вашем примере показаны обматывающие трубы вокруг всей строки, но заголовок говорит «каждое слово» - поэтому неясно, что требуется. –

ответ

2

Вы можете сделать

awk '{print "|"$0"|"}' file 

или

awk '{$0="|"$0"|"}1' file 

или twalberg указывает, вы можете использовать sed

sed 's/^\|$/|/g' file 

Это заменить стартовый якорь ^ или конец якоря $ с |

+0

Обязательная альтернатива 'sed':' sed -e 's/^/| /' -e '/ $/\ /' файл'. Один случай, когда версия 'awk' на самом деле проще вводить, я думаю ... – twalberg

+0

@twalberg Или просто так:' sed 's/^/| /; s/$/| /' file' или даже короче, как в моем обновленном сообщении. – Jotne

+0

Спасибо вам всем! – Rish

1

С СЭД:

sed 's/.*/|&|/g' File 

.* будет соответствовать всей линии. & => шаблон, который был сопоставлен, который будет .* (entire line). Добавить | вокруг соответствующего шаблона.

Для INPLACE замещения: sed -i 's/.*/|&|/g' File

Смежные вопросы