A string stdout manipula, apaga tudo depois de uma palavra por linha

0

Minha string é assim ..

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

Eu quero canalizar para saída como

foo
bar

Exclua todos os caracteres após um primeiro < ter encontrado cada linha.

    
por Smile.Hunter 25.12.2012 / 14:03

2 respostas

7

Este é o sed básico. Usar sed não é difícil quando você conhece expressões regulares . Um comando básico sed para ler a entrada e retirar cada < e a seguinte parte, se existir, e depois imprimir a linha (pode ser modificada):

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

sed usa expressões regulares , o texto da página de manual relevante para sed(1) que se aplica ao comando acima:

% bl0ck_qu0te%

Alternativa usando cut ( página de manual para cut(1) ), " divida a string por < e pegue o campo 1 st.

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

Alternativa usando grep , "corresponde apenas a todos os caracteres contendo o conjunto a a z (sem distinção entre maiúsculas e minúsculas)" ( página de manual de grep(1) ):

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

(nota: tomei a liberdade de usar [a-z]* , significando "zero ou mais ocorrências de uma letra", porque o grep não retornará uma linha vazia ao usar a opção -o )

Alternativa usando o awk, usando a mesma ideia de cut ( página de manual de awk(1) ):

echo 'foo<....' | awk -F '<' '{print $1}'
    
por Lekensteyn 26.12.2012 / 19:25
1

Amostra:

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

    
por nickanor 25.12.2012 / 14:41