2013-04-25 2 views
0

Как я могу управлять выходным текстом grep.Как манипулировать текстом с awk?

Сейчас я использую команду:

grep -i "<url>" $file >> ./txtFiles/$file.txt 

Это будет выводить что-то вроде этого:

<url>http://www.simplyrecipes.com/recipes/chicken_curry_salad/</url> 

, а затем следующий текст будет перейти к следующей строке.

Как я могу избавиться от <url> и </url> и остановить его от перехода к следующей строке в конце.

+0

избавиться от чего? возможно, вы хотите удалить новый символ строки, в этом случае он будет транслироваться в tr "\ n" "" – lc2817

ответ

2
sed '/<\/*url>/!d;s///g' 
  • <\/*url> матчи как стартовые и конечные теги
  • удалить строки, которые не имеют этот
  • удалите все случаи этой модели

С вашим примером, это может выглядеть следующим образом

sed '/<\/*url>/!d;s///g' $file >> ./txtFiles/$file.txt 
+0

Спасибо, что это работает. Но последнее, однако, все равно переходит к следующей строке после URL. Знаете ли вы, как я смогу избавиться от этого, чтобы следующий текст мог сразу последовать за ним. –

+0

или, возможно, это то, как я добавляю следующую строку. Я использую printf, поэтому я предполагаю, что это то, что заставляет его перейти к следующей строке для следующего текста. Есть ли что-то еще, что я должен использовать для добавления текста в конце строки, а не в новую строку? –

0

Одиночные команды:

sed -in '/<url>/ { s|<url>\(.*\)</url>|\1| ; p ; }' INPUT > OUTPUT 

Или с AWK:

awk -F "</?url>" '/<url>/ { print $2 }' INPUT > OUTPUT 

Примечание: и может дать вам неверный вывод, если более чем один <url>...</url> модели происходят на одной линии. Версия sed может выйти из строя, если <url>...</url> содержит любой символ (|).

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