我的字符串看起来像这样..
foo<..............................
bar</............................
我想将输出管道作为
foo
bar
删除每行第一个找到之后的所有字符<
。
答案1
这是基本的 sed。一旦你知道了,使用 sed 并不困难常用表达sed
。读取输入并剥离每个<
部分(如果存在)的基本命令,然后打印该行(可以修改):
$ echo 'foo<....' | sed 's/<.*//'
foo
sed
用途常用表达,相关手册页文本sed(1)
适用于上述命令:
s/regexp/replacement/
尝试将正则表达式与模式空间进行匹配。如果成功,则用替换替换匹配的部分。替换可能包含特殊字符 & 以引用模式空间中匹配的部分,特殊转义符 \1 到 \9 以引用正则表达式中相应的匹配子表达式
替代使用cut
(手册页cut(1)
),“将字符串按 分割<
,并取1
st 字段。
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