2012-03-28 3 views
0

Вот как настроить это ...Как добавить текст в конец строки в UNIX

LINE W/ TEXT1 
LINE W/ TEXT2 
LINE W/ TEXT3 
FIX W/ TEXT5 
LINE W/ TEXT6 
LINE W/ TEXT7 

Идея заключается в том, чтобы получить FIX строку и добавить «*» (3 звездочки) в конце этой линии.

У меня возникли вопросы, где он заменяет первое слово с текстом, а не добавлять к концу, было баловаться с этим форматом несколько

СЭД «/ FIX/s/$/* /» Myfile

любая помощь?

+0

Вы пример 'sed '/ FIX/s/$/* /' myfile' отлично работает для меня (работает OS X). Если FIX является частью регулярного выражения функции s, то он будет заменен, например. 'sed s/FIX/* /'. –

ответ

0

Во-первых, очистка файл

dos2unix yourFile 

Тогда

sed '/FIX/s/$/\*\*\*/' yourFile 

ВЫВОД

LINE W/ TEXT1 
LINE W/ TEXT2 
LINE W/ TEXT3 
FIX W/ TEXT5*** 
LINE W/ TEXT6 
LINE W/ TEXT7 

Я надеюсь, что это помогает.

+0

Это не D: это закончилось тем же вопросом, что и у меня. Это было «*** W/TEXT 5» – user1298946

+0

Использовали ли вы dbl-кавычки '' ... "' или одиночные кавычки '' ... ''? Для этого вам нужно использовать одинарные кавычки. Также отредактируйте свой пост, чтобы указать точный результат, который вы получаете. Удачи. – shellter

+0

Хмм, В моей системе это работало в любом случае, одинарная или dbl-цитата. Какую ОС вы используете? Удачи. – shellter

2

Я считаю, что проблема заключается в том, что ваш входной файл находится в формате DOS, поэтому есть возврат каретки до конца каждой строки, поэтому ваши sed вставляет * после возврата каретки, но перед новой строкой. Вы должны быть в состоянии увидеть, что происходит с:

sed '/FIX/s/$/***/' myfile | cat -v 

Смотрите, если это работает как решение:

sed '/FIX/s/\([^[:cntrl:]]*\)/\1***/' myfile 

удачи.

+0

хороший catch! Всем удачи. – shellter

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