经过几次 grep,我能够列出一些像这样的"单词"
一切始于
cat pathverilargestructured.txt | grep option1 -B50 | grep option2 -A30 | grep option3 -A20 | grep "=host"
这导致具有此结构的列表
part1.part2.part3.part4=host
part1.part2.part3.part4=host
...
part1.part2.part3.part4=host
我想在 bash 中使用 sed 或任何其他选项来将其修剪为
part1.part2.part3.part4
或
part2.part3.part4
假设partN
只有字母数字(没有特殊字符)
谢谢
使用 awk,您可以使用 -F 参数指定多个分隔符,并使用 OFS 选项指定输出字段分隔符.
例如,awk -F '[.=]' '{print $2,$3,$4}' OFS=.
将仅打印输出的第二、第三和第四行,以 dot.
分隔
cat pathverilargestructured.txt | grep option1 -B50 | grep option2 -A30 | grep option3 -A20 | grep "=host" | awk -F '[.=]' '{print $2,$3,$4}' OFS=.
如果我理解正确,那就通过管道
sed 's/=.*//'
。这将切断每行中的第一个=
以及之后的所有内容。所以,总而言之,
cat pathverilargestructured.txt | grep option1 -B50 | grep option2 -A30 | grep option3 -A20 | grep "=host" | sed 's/=.*//'
或者,您可以使用cut
:
cut -d = -f 1
附录:走cut
路线,隔离除part1
之外的所有内容,您可以通过另一个cut
调用来管道它
cut -d . -f 2-
如在
echo 'part1.part2.part3.part4=host' | cut -d = -f 1 | cut -d . -f 2-
这里-f 2-
的意思是"从第二个字段到最后一个字段"。 如果您只需要第 2 部分和第 3 部分,则可以使用 -f 2-3
,依此类推。有关详细信息,请参阅man cut
。