我正在寻找能够使用bash /标准Linux命令转换字符串的内容,如下所示:
例如:
谢谢!
ric*_*chq 32
这应该这样做:
sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt
Run Code Online (Sandbox Code Playgroud)
in.txt在哪里:
"Fo'od'
'Food'
"Food"
"Fo"od'
Food
'Food"
"Food'
'Fo'od'
"Fo'od"
Fo'od
'Fo"od'
"Fo"od"
Fo"od
Run Code Online (Sandbox Code Playgroud)
而expected.txt是:
"Fo'od'
Food
Food
"Fo"od'
Food
'Food"
"Food'
Fo'od
Fo'od
Fo'od
Fo"od
Fo"od
Fo"od
Run Code Online (Sandbox Code Playgroud)
您可以检查它们是否匹配:
diff -s <(sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt) expected.txt
Run Code Online (Sandbox Code Playgroud)
Tim*_*ost 16
你可以使用tr:
echo "$string" | tr -d 'chars to delete'
Run Code Online (Sandbox Code Playgroud)
...也有效,但是已知'tr'在更老的(大约是Redhat 9-ish)发行版中存在问题.tr是'translate'的缩写,常用于管道转换输入.该-d选项仅表示"删除".
大多数现代版本还包含预定义的宏来转换从上到下,从下到上,杀死空白等等.因此,如果您使用它,请花一点时间来查看它的其他内容(请参阅帮助输出/手册页),派上用场了.
小智 12
VAR="'FOOD'"
VAR=$(eval echo $VAR)
Run Code Online (Sandbox Code Playgroud)
说明:由于shell已经理解了引号,因此您可以要求shell评估一个只是回显引用字符串的命令,就像您自己键入它时一样.
在这里,eval echo $VAR扩展为eval echo 'FOOD'因为引号实际上是值的一部分VAR.如果你遇到echo 'FOOD'了你得到的shell FOOD(没有引号).这就是eval:它接受输入并像shell命令一样运行它.
你可能想用sed ......
echo $mystring | sed -s "s/^\(\(\"\(.*\)\"\)\|\('\(.*\)'\)\)\$/\\3\\5/g"
Run Code Online (Sandbox Code Playgroud)