Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将[a-z]、[a-z]替换为[a-z]、[a-z],并保留字母_Bash_Awk_Sed - Fatal编程技术网

Bash 将[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

我如何用[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 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的确切期望。)