2015-07-06 5 views
0

Я новичок в Shell Scripting, и я застреваю, делая проблему. У меня есть файл со строками вроде abc_some, разнообразный text.ext, и вы хотите перевести его на abcTRY. Теперь есть много строк в файле с подчеркиванием (_), но мне просто нужно заменить их расширением (.ext) и подчеркиванием, и все эти строки имеют разный текст, написанный между подчеркиванием и расширением.Замена подстроки оболочки Scripting

Input= abc_some varied text.ext

Output= abcTRY

Я написал это:

grep -o "abc_.*.ext"| cut -d '_' -f1 

Теперь не как заменить оставшуюся часть с TRY, а также хочу знать, если а также отличаются, что делать.

Надеюсь, что вопрос ясен. Благодарю.

+2

«Надеюсь, этот вопрос ясен». Неа. Это не так. Попробуйте показать некоторые входы и ожидаемые результаты. Сказав это, anser может быть 'sed' или' awk' в зависимости от того, насколько сложна проблема ... – John3136

+0

Здравствуйте, пожалуйста, покажите нам часть входного файла, выход желания и то, что вы пробовали до сих пор. – vlp

+0

Надеюсь, теперь это ясно. – RachSingla

ответ

2

Вы можете использовать sed (с расширенным регулярным выражениям ERE), чтобы сделать это:

sed -r 's/(abc)_.*?\.ext/\1TRY/g' file 

Чтобы изменить файл InPlace:

sed -r --in-place 's/(abc)_.*?\.ext/\1TRY/g' file 

Или с Basic регулярных выражений (BRE):

sed 's/\(abc\)_.*\.ext/\1TRY/g' file 
+0

Thanks.It работает, любая идея, если abc также не исправлена? – RachSingla

+0

@ user3631660 Вы можете использовать переменную ('$ abc') и использовать ее как:' sed -r 's/($ abc) _. *? \. Ext/\ 1TRY/g "file'. Обратите внимание, что здесь я использовал двойные кавычки ... И если решение работает, вы можете пометить его как принятое, нажав на галочку слева от ответа. – Jahid

+1

Получил. Благодаря тонну. – RachSingla

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