强制 grep 在 bash 中仅显示单词的不匹配部分



经过几次 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

最新更新