命令将封闭的单引号转换为unix中的单引号

时间:2016-04-06 06:18:52

标签: perl shell unix awk sed

我有标签处理过的文件。一个场景。 包含记录'RAZ'。这里是关闭单引号我希望在同一时间用单引号NAME|SUB `RAZ` |Rockpor`t 全局替换它 如果关闭单引号位于某个单词的中间,我不想替换。

例如:

sed -i "s/\’/'/g"  Test.txt

我在下面尝试了命令

'RAZ'|Rockpor't

输出:

'RAZ'|Rockpor`t

期望的输出应该是:

{{1}}

请告知。

4 个答案:

答案 0 :(得分:0)

你可以做这样的事情

您的输入文件,例如/tmp/abc.txt似乎

#cat /tmp/abc.txt
`ABC`|REsaff`t|`rest`
`PQR`|sasdasd`y|d`souza

现在,运行此命令

cat /tmp/abc.txt | sed s?\|?\\n\|?g | sed s?^\`?\'?g | sed s?\`\$?\'?g | sed s?^\|\`?\|\'?g | tr '\n' '#' | sed s?#\|?\|?g | tr '#' '\n'

该命令的作用是,它隔离所有选项卡值,如果选项卡的值以`开头和结尾,它替换为',然后再将所有选项卡合并在一起。

期望的输出:

'ABC'|REsaff`t|'rest'
'PQR'|sasdasd`y|d`souza

此解决方案适用于任意数量的标签。如果角色位于选项卡的开头或末尾,则将在所有选项卡中替换字符`。

注意:我在这里使用的分隔符是#来隔离换行符,你可以相应地使用它。

答案 1 :(得分:0)

此perl命令将为您执行

perl -pe "s/`(?![a-z])|(?<![a-z])`/'/ig"

它取代了之前没有或没有字母

的所有反引号

输出

NAME|SUB
'RAZ' |Rockpor`t

答案 2 :(得分:0)

我建议

perl -pe 's/(^|\W)`(.*?)`($|\W)/$1\x27$2\x27$3/g'

扩展

perl -pe '
    $q = "\x27";  # a single quote
    s{
        (^|\W)    # start of line or a non-word char
        `         # the open quote
        (.*?)     # some non-quote characters
        `         # the close quote
        ($|\W)    # end of line or a non-word char
    }{$1$q$2$q$3}gx
'

演示

perl -pe '$q="\x27"; s/(^|\W)`(.*?)`($|\W)/$1$q$2$q$3/g' <<'END'
`foo`|I have James` hat|doesn`t
END
'foo'|I have James` hat|doesn`t

答案 3 :(得分:-1)

使用下面的代码。它有帮助。

 sed 's/`/'"'"'/;s/`/'"'"'/' test.txt

我用过&#34;逃避单引号函数。请参阅下面的screenshot.graditude

enter image description here