标准输出字符串操作,删除每行一个单词后的所有内容

标准输出字符串操作,删除每行一个单词后的所有内容

我的字符串看起来像这样..

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

我想将输出管道作为

foo
bar

删除每行第一个找到之后的所有字符<

答案1

这是基本的 sed。一旦你知道了,使用 sed 并不困难常用表达sed。读取输入并剥离每个<部分(如果存在)的基本命令,然后打印该行(可以修改):

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

sed用途常用表达,相关手册页文本sed(1)适用于上述命令:

s/regexp/replacement/
尝试将正则表达式与模式空间进行匹配。如果成功,则用替换替换匹配的部分。替换可能包含特殊字符 & 以引用模式空间中匹配的部分,特殊转义符 \1 到 \9 以引用正则表达式中相应的匹配子表达式

替代使用cut(手册页cut(1)),“将字符串按 分割<,并取1st 字段。

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

替代使用grep,“仅匹配包含 a 到 z 字符集的所有内容(不区分大小写)”(手册页grep(1)):

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

(注意:我擅自使用了,表示“零次或多次出现一个字母”,因为 grep 使用该选项[a-z]*时不会返回空行)-o

替代方法是使用 awk,使用与cut(手册页awk(1)):

echo 'foo<....' | awk -F '<' '{print $1}'

答案2

样本:

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

相关内容