Cit*_*ght 5 shell bash sed quoting
我有一个包含以下内容的文件:
[root@server list]# cat filenames.txt
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB]
[root@qa4app01 list]#
Run Code Online (Sandbox Code Playgroud)
我想这是一个名单,我python脚本使用,所以我试图改变AAA'
到'AAA'
和'BBB
对'BBB'
,我想我会用sed
和替换[
用['
和]
用']
。
为了确认,我试过这个:
[root@server list]# cat filenames.txt | sed "s/]/']/g"
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','MENSCOGH','TESTENT','DORASINE','LOKAWINK','BBB']
[root@server list]#
Run Code Online (Sandbox Code Playgroud)
它起作用了,我能够]
用']
. 因此,因为AAA
我只需要更改用左方括号替换右方括号和 sed 中的单引号并尝试以下操作:
[root@server list]# cat filenames.txt | sed -e "s/]/']/g" -e "s/[/['/g"
sed: -e expression #2, char 8: unterminated `s' command
[root@server list]#
Run Code Online (Sandbox Code Playgroud)
好的。我认为由于某种原因附加sed
命令无法正常工作,为了检查这一点,我分别尝试sed
了左方括号:
[root@server list]# cat filenames.txt | sed "s/[/['/g"
sed: -e expression #1, char 8: unterminated `s' command
[root@server list]#
Run Code Online (Sandbox Code Playgroud)
奇怪的。看起来好像sed
对左括号和方括号的处理方式不同。我能够在没有转义的情况下逃脱[
,而sed
在]
没有转义字符的情况下拒绝使用。通过向左方括号添加转义字符,我最终得到了我想要的,如下所示:
[root@server list]# cat filenames.txt | sed -e "s/]/']/g" -e "s/\[/\['/g"
['AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','MENSCOGH','TESTENT','DORASINE','LOKAWINK','BBB']
[root@server list]#
我正在编写一个 python + shell 脚本,它将处理带有方括号的大量实例的文件。我的问题是左右方括号是否被sed
or区别对待bash
。
sed 版本是 GNU sed 版本 4.2.1。
PS:为了安全起见,我决定使用带有两个括号的转义字符,但要绝对确保如果我不在我所在的地方使用转义字符(出于可读性原因),它不会破坏脚本仅使用右方括号 ]
[
引入一个字符类并]
关闭它。
如果 sed 只看到]
(即关闭命令),那就没问题了,sed 假定这不是特殊命令。
仅使用[
(没有结束]
)会混淆sed
,因此必须对其进行转义。
附带说明一下,不需要
g
(全局)标志(每行只有一个替换)[
。我管理你的变化
sed -e "s/]/']/" -e "s/\[/['/"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14884 次 |
最近记录: |