如何使用 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 从文件的每一行中删除单词? [复制]
sed 或 Perl 一行 + 如何仅在完全匹配时替换文件中的路径