我想在 bash 中的单词前后连接一个字符
I want to concat a character before and after a word in bash
我在这样的文件中声明了一个变量:
export psw=text
我想连接 '
单个字符 before 和 after 变量的值。我的意思是,我想替换这样的值:
export psw='text'
我该如何完成?
我想通过命令来完成。我不想手动完成。
此 sed
命令将完成您的工作:
sed -i.bak -E "s/(export[ \t]+[[:alnum:]]+=)([^']+)/''/" file
上面的表达式只会在单引号不存在时添加。
如果你更喜欢 echo 方法,你也可以这样做
pwd=text
export psw=$(echo "\'$pwd\'")
\ 需要转义单引号,因此它将成为字符串的一部分,并且您将添加引号的变量 echo 的输出分配给自身
使用 Perl 简单易行
perl -i -lpe 's/\=(\w+)$/='"'\1'"'/' your-file
-i
保存in-palce
输出
export psw='text'
工作原理
s/.../
这部分符合want you wnat
/.../
此部分用于 替换 您已经匹配的部分。
所以在第一步中你匹配 =(\w+)$
和等号和一个词,它应该在行尾。好的,之后你把这部分改成
/='"'\1'"'
这意味着用 匹配组运算符 ()
匹配的相等单引号和单引号,然后是另一个单引号。
所以它匹配:=text
然后将其替换为 ='text'
-i
用于保存结果
-p
用于打印到屏幕 + while 循环
-l
换行
-e
一个临时程序。
不带 -i
就 试一试,然后您就会逐渐了解它是如何工作的。
注意
'"'
只是为了转义 bash.
中的单引号
\1
还有这个
我在这样的文件中声明了一个变量:
export psw=text
我想连接 '
单个字符 before 和 after 变量的值。我的意思是,我想替换这样的值:
export psw='text'
我该如何完成?
我想通过命令来完成。我不想手动完成。
此 sed
命令将完成您的工作:
sed -i.bak -E "s/(export[ \t]+[[:alnum:]]+=)([^']+)/''/" file
上面的表达式只会在单引号不存在时添加。
如果你更喜欢 echo 方法,你也可以这样做
pwd=text
export psw=$(echo "\'$pwd\'")
\ 需要转义单引号,因此它将成为字符串的一部分,并且您将添加引号的变量 echo 的输出分配给自身
使用 Perl 简单易行
perl -i -lpe 's/\=(\w+)$/='"'\1'"'/' your-file
-i
保存in-palce
输出
export psw='text'
工作原理
s/.../
这部分符合want you wnat
/.../
此部分用于 替换 您已经匹配的部分。
所以在第一步中你匹配 =(\w+)$
和等号和一个词,它应该在行尾。好的,之后你把这部分改成
/='"'\1'"'
这意味着用 匹配组运算符 ()
匹配的相等单引号和单引号,然后是另一个单引号。
所以它匹配:=text
然后将其替换为 ='text'
-i
用于保存结果
-p
用于打印到屏幕 + while 循环
-l
换行
-e
一个临时程序。
不带 -i
就 试一试,然后您就会逐渐了解它是如何工作的。
注意
'"'
只是为了转义 bash.
中的单引号
\1
还有这个