如何使用 sed 在一行中匹配一个或另一个单词

Posted

技术标签:

【中文标题】如何使用 sed 在一行中匹配一个或另一个单词【英文标题】:how to match one word or another, within a single line, with sed 【发布时间】:2022-01-23 21:12:11 【问题描述】:

对于这个命令xwininfo -id 0x8a00004 |grep "Absolute\|Width\|Height"我有这个输出

Absolute upper-left X:  44
Absolute upper-left Y:  53
Width: 999
Height: 698

通过使用单个 sed 命令,我希望它变成这样:

nX=44
nY=53
nWidth=999
nHeight=698

我当前的代码是这样的:

xwininfo -id 0x8a00004 |grep "Absolute\|Width\|Height" |sed -r 's".*([XY]):[[:blank:]]*(.*)"n\1=\2"'

我知道要使用 sed 匹配单词,我需要在表达式上使用 \bWordToMatch\b,但我找不到将它放在我的命令中 ([XY]) 的位置... 我也知道要匹配“一个或另一个”字,我需要使用\|,我也猜不到..

【问题讨论】:

【参考方案1】:

尝试关注sed

sed -r 's/.*(X|Y|Width|Height)\s*:\s*([0-9]+)/n\1=\2/'

【讨论】:

成功了!我必须打破[] 的思维障碍; | 也受到 () 的限制(我认为这不起作用..)thx! 在GNU sed 中,括号和竖线need to be escaped 像这样:\( \| \) 这个答案使用-r 标志,相当于GNU --regexp-extended。不用-r逃跑,但答案应该是这样的。

以上是关于如何使用 sed 在一行中匹配一个或另一个单词的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个文件中的一个文件中查找单词?

如何在 shell 脚本中使用 sed 从文件的每一行中删除单词? [复制]

Linux三剑客(sed)-编辑匹配到的文本

sed 或 Perl 一行 + 如何仅在完全匹配时替换文件中的路径

如何使用dc_shell中的/ bin / sed命令删除与下一行中调用的下一个新模式匹配的模式

匹配单词忽略sed中带有额外字符的相同单词