Bash 将[a-z]、[a-z]替换为[a-z]、[a-z],并保留字母
我如何用[a-z]、[a-z]替换[a-z]、[a-z]并保留这些字母 输入Bash 将[a-z]、[a-z]替换为[a-z]、[a-z],并保留字母,bash,awk,sed,Bash,Awk,Sed,我如何用[a-z]、[a-z]替换[a-z]、[a-z]并保留这些字母 输入 suny stony brook, stony brook,usa. suny stony brook, stony brook, usa. 输出 suny stony brook, stony brook,usa. suny stony brook, stony brook, usa. 我尝试过的 sed 's/[a-z],[a-z]/[a-z], [a-z]/g' <<< "suny st
suny stony brook, stony brook,usa.
suny stony brook, stony brook, usa.
输出
suny stony brook, stony brook,usa.
suny stony brook, stony brook, usa.
我尝试过的
sed 's/[a-z],[a-z]/[a-z], [a-z]/g' <<< "suny stony brook, stony brook,usa."
sed 's/[a-z],[a-z]/, /g' <<< "suny stony brook, stony brook,usa."
sed 's/[a-z],[a-z]/[a-z], [a-z]/g' <<< "suny stony brook, stony brook,usa."
扩展正则表达式参数的sed's/[a-z],[a-z]/[a-z],[a-z]/g'
-r
,[^]
对于,
在后面不带“”
sed -r 's/,([^ ])/, \1/g' <<< "suny stony brook, stony brook,usa."
扩展正则表达式参数的
-r
,[^]
对于,
在后面不带“”
sed -r 's/,([^ ])/, \1/g' <<< "suny stony brook, stony brook,usa."
我尝试过的
sed 's/[a-z],[a-z]/[a-z], [a-z]/g' <<< "suny stony brook, stony brook,usa."
sed 's/[a-z],[a-z]/, /g' <<< "suny stony brook, stony brook,usa."
sed 's/[a-z],[a-z]/[a-z], [a-z]/g' <<< "suny stony brook, stony brook,usa."
注意我是如何用\(
和\)
包围那些[a-z]
?这些表单捕获组以后可以通过编写\1
、\2
等来引用(数字表示它们的位置)
或者,您可以通过在sed
中指定-r
开关(例如sed-r
)来启用扩展正则表达式,在这种情况下,您只需要编写(
和)
来形成捕获组
把它放在一起
sed-re的/([a-z]),([a-z])/\1,2/g'
我尝试过的
sed 's/[a-z],[a-z]/[a-z], [a-z]/g' <<< "suny stony brook, stony brook,usa."
sed 's/[a-z],[a-z]/, /g' <<< "suny stony brook, stony brook,usa."
sed 's/[a-z],[a-z]/[a-z], [a-z]/g' <<< "suny stony brook, stony brook,usa."
注意我是如何用\(
和\)
包围那些[a-z]
?这些表单捕获组以后可以通过编写\1
、\2
等来引用(数字表示它们的位置)
或者,您可以通过在sed
中指定-r
开关(例如sed-r
)来启用扩展正则表达式,在这种情况下,您只需要编写(
和)
来形成捕获组
把它放在一起
sed-re的/([a-z]),([a-z])/\1、\2/g'基于sed的方法中有一个陷阱:
如果两个逗号之间有一个(小写)字符,它将仅用,
替换其中一个(第一个)
e、 g
注意:其他答案/评论中提到的与区域设置相关的警告仍然适用。但这些评论中也提供了他们的解决方案。基于sed
的方法中有一个陷阱:
如果两个逗号之间有一个(小写)字符,它将仅用,
替换其中一个(第一个)
e、 g
注意:其他答案/评论中提到的与区域设置相关的警告仍然适用。但是这些注释中也提供了它们的解决方案。如果您有Gawk
,请使用gensub
$ awk '{print gensub(/([[:lower:]]),([[:lower:]])/,"\\1, \\2","g")}' <<<"suny stony brook, stony brook,usa."
suny stony brook, stony brook, usa.
$awk'{print gensub(/([:lower:]]),([:lower:]])/,“\\1,\\2”,“g”)}如果您有呆呆的
,请使用gensub
$ awk '{print gensub(/([[:lower:]]),([[:lower:]])/,"\\1, \\2","g")}' <<<"suny stony brook, stony brook,usa."
suny stony brook, stony brook, usa.
$awk'{print gensub(/([:lower:]]),([:lower:]])/,“\\1,\\2”,“g”)}您想这样做,这只是bash shell,或者您也可以使用其他命令?bash shell的任何命令行您可能可以使用两个命令来代替,首先在每个逗号后添加一个空格,然后替换逗号+2个空格以删除多余的空格。要执行此操作,请仅使用bash shell,或者也可以使用其他命令?bash shell的任何命令行都可以使用两个命令来执行此操作,首先在每个逗号后添加一个空格,然后替换逗号+2个空格以删除多余的空格。请注意,在某些地区,[a-z]
可以包含字符a
,B
,等等。如果您想方便可靠地只查找小写字母,请使用[[:lower:]
,而不是[a-z]
。。为了便于移植,我会在bash脚本的顶部指定export LC_ALL=C
,然后使用它。(但我无法猜测OP对[a-z]的确切期望。)请注意,在某些地区,[a-z]
可以包含字符a
,B
,等等。如果您想方便可靠地只查找小写字母,请使用[[:lower:]
,而不是[a-z]
。。为了便于移植,我会在bash脚本的顶部指定export LC_ALL=C
,然后使用它。(但我无法猜测[a-z]对OP的确切期望。)