Shell sed 如何替换单引号,回车符,以及分号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell sed 如何替换单引号,回车符,以及分号相关的知识,希望对你有一定的参考价值。

举个例子 如
strstrstrstrstrstrstrstrstr'
'create table xxxx......这样的一段字符串

怎么使用 shell sed命令把其中的

’create
换成

‘create

还有双引号,实心点怎么表示在 sed命令里 ?

在线跪求大神解答

单引号替换成分号:
$ echo 1234\' | sed "s/'/;/"
双引号替换成分号:
$ echo 1234\" | sed 's/"/;/'
点替换成a
$ echo 11234. | sed 's/\./a/'
参考技术A 替换行末的单引号
sed "s/'$/;/g" file

加-i参数替换文本内容,你可以先试不加-i输出看下是否达到要求。其它替换同理
特殊符号替换的表达示用双引号就行了。再不行就用“\”转义追问

大师,如果把行首的单引号替换成空怎么搞,如下


’create
换成

create

追答

分两步
1。单行只有单引号
sed "s/^'$/;/g" file
2。单行替换首字符单引号
sed "s/^'//g" file

先1后2,不然你就死翘翘了

本回答被提问者采纳

shell中单引号双引号反斜杠简说

需求:ssh远程修改文件,变量从文件中获取,插入远程服务器的文件里
 
shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。(注意是所有,只是单引号本身不能够出现在其中)。
双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:
  • $加变量名可以取变量的值
  • 反引号仍表示命令替换
  • \$表示$的字面值
  • \`表示`的字面值
  • \"表示"的字面值
  • \\表示\的字面值
  • 除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。
从网上多个贴上发现,我一直在范一个错误,高估了shell的对引号的处理逻辑
对于引号来说,第一个引号出现,到第二个引号算作一对,并不会聪明的去判断其实第一个引号和第四个引号才是一对。
 
1、单引号
单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号
当shell碰到第一个单引号时,它忽略掉其后直到第二个单引号的所有特殊字符
 
2、双引号
在双引号内,不被忽略的符号:`、$、\
 
3、反引号
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。
反引号和$()的功能是命令替换,将反引号或$()中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量
但反引号内不能再引用反引号,而$()中可以引用反引号
[[email protected] bin]# s=$(echo date)
[[email protected] bin]# echo $s
date
[[email protected] bin]# s=$(echo `date`)
[[email protected] bin]# echo $s
Sat Aug 12 11:35:20 CST 2017
 
4、反斜杠
反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
echo -e "\n"
反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。
 
示例:
1、单引号里存在单引号
[[email protected] bin]# echo $\‘
[[email protected] bin]# echo -e \047
2、处理文件中存在单引号
[[email protected] package]# echo "mmm‘sss"  | sed s#\#\\\\047#g
mmm\047sss
[[email protected] package]# echo "mmm‘sss"  | sed s/‘""/"\\\047"‘/g
mmm\047sss
[[email protected] package]# echo "mmm‘sss"  | sed "s/‘/\\\\047/g"
mmm\047sss
3、单引号里可以打印变量吗?
[[email protected] ~]# echo "$key"
"$key"
[[email protected] ~]# echo ‘‘$key‘‘
abc
4、远程处理文件
命令列子:ssh $ip " echo ‘$key=$value‘ >> file "或者ssh $ip " sed -i ‘s/^$key.*/$key=$value/g‘ >> file "
补充:$value变量包含任意字符,即
讨论:ssh里的sed或者echo使用单引号还是双引号
 

以上是关于Shell sed 如何替换单引号,回车符,以及分号的主要内容,如果未能解决你的问题,请参考以下文章

shell中,如何替换双引号中内容为某个变量?

如何在sed中使用变量

shell脚本中单引号和双引号的区别

shell脚本之sed使用----替换变量转义字符

转载:shell脚本之sed使用----替换变量转义字符

linux 特殊符号怎样用sed替换