Stdout строка манипулировать, удалить все после слова в строке

Моя строка выглядит следующим образом ..

foo<.............................. 
bar</............................

Я хочу передать для вывода как

foo
bar

Удалить все символы после того, как первый < найдет каждую строку.

0
задан 24 January 2014 в 20:02

2 ответа

Образец:

cat textWithFooBar.txt | cut -d '<' -f 1 > output.txt

0
ответ дан 24 January 2014 в 20:02
1125 Это базовый сед. Использование sed не сложно, если вы знаете регулярные выражения . Базовая команда sed для считывания ввода и разборки каждого < и следующей части, если она существует, а затем печати строки (может быть изменена):

$ echo 'foo<....' | sed 's/<.*//'
foo

sed использует регулярные выражения , соответствующий текст страницы справочника для sed(1) , который применяется к вышеуказанной команде:

s / regexp / replace / / 1124]
Попытка сопоставить регулярное выражение с шаблоном пространства. В случае успеха замените ту часть, которая соответствует замене. Замена может содержать специальный символ & amp; для ссылки на ту часть шаблонного пространства, которая соответствует, и специальные экранированные символы от \ 1 до \ 9 для ссылки на соответствующие совпадающие подвыражения в регулярном выражении

Альтернатива с использованием cut ([ 1121] страница справочника по cut(1) ), «разбить строку на < и взять поле 1.

echo 'foo<....' | cut -d'<' -f1

Альтернатива с использованием grep», соответствовать только всему, содержащему символы набора от a до z (без учета регистра) "( страница справочника grep(1) ):

echo 'foo<....' | grep -io '[a-z]*'

(примечание: я взял на себя смелость использовать [a-z]*, что означает «ноль или более вхождений буквы», потому что grep не возвращает пустую строку при использовании опции -o)

Альтернатива с использованием awk, используя ту же идею руководства cut ( страница awk(1) ):

echo 'foo<....' | awk -F '<' '{print $1}'
0
ответ дан 24 January 2014 в 20:02

Другие вопросы по тегам:

Похожие вопросы: