Моя строка выглядит следующим образом ..
foo<..............................
bar</............................
Я хочу передать для вывода как
foo
bar
Удалить все символы после того, как первый <
найдет каждую строку.
Образец:
cat textWithFooBar.txt | cut -d '<' -f 1 > output.txt
sed
для считывания ввода и разборки каждого <
и следующей части, если она существует, а затем печати строки (может быть изменена):
$ echo 'foo<....' | sed 's/<.*//'
foo
sed
использует регулярные выражения , соответствующий текст страницы справочника для sed(1)
, который применяется к вышеуказанной команде:
s / regexp / replace / / 1124]
blockquote>
Попытка сопоставить регулярное выражение с шаблоном пространства. В случае успеха замените ту часть, которая соответствует замене. Замена может содержать специальный символ & 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}'