我想在bash命令行上搜索替换包含空格的内容,我认为sed是最简单的方法。
使用表示标签或空格的[ \t]
来匹配空格,按预期工作:
echo "abc xyz" | sed "s/[ \t]xyz/123/"
abc123
但令我惊讶的是,使用\s
代替[ \t]
并不是这样:
echo "abc xyz" | sed "s/\sxyz/123/"
abc xyz
我对bash很新,所以我可能会遗漏一些微不足道的东西,但无论我做什么,我都无法让它发挥作用。使用\\s
代替\s
,使用单引号('
代替"
),将空格标记放在方括号内(如[\s]
甚至{{ 1}}),似乎没什么帮助..?
(编辑)以防它从一个sed / bash版本到另一个版本不同:我在这里正在研究OS X.
此外,我注意到当我在[\\s]
空白部分之后添加+
时,可选地抓取多个空格/制表符(如果存在),它不再起作用......?
[ \t]
(同样,还尝试使用echo "abc xyz" | sed "s/[ \t]+xyz/123/"
abc xyz
代替\+
,单引号而不是双引号,没有任何帮助)
答案 0 :(得分:1)
echo 'abc xyz<>abcxyz' | sed 's/[[:space:]]xyz/123/g'
abc123<>abcxyz
echo 'abc xyz<>abcxyz' | sed "s/[[:space:]]xyz/123/g"
abc123<>abcxyz
不适用于非常老的sed版本,但在GNU sed上作为posix投诉(AIX,...)