我正在寻找一些可以像下面这样转换字符串的东西,只使用bash /标准Linux命令:
字符串周围的单引号应该是removed
,则不环绕字符串的same
例如:
“食品”应改为“食品”应成为“食品食品”食品应保持不变“食品”<代码>H 123“食品”应保持不变<代码>H 224< Fo'od
H 230< Fo"od
"Fo"od“>H 131”od“应成为Fo”d>H 234
“应保持相同的代码”<236/<<237>代码><><谢谢!
发布于 2009-04-16 21:24:19
这应该可以做到:
sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt
其中in.txt是:
"Fo'od'
'Food'
"Food"
"Fo"od'
Food
'Food"
"Food'
'Fo'od'
"Fo'od"
Fo'od
'Fo"od'
"Fo"od"
Fo"od
expected.txt是:
"Fo'od'
Food
Food
"Fo"od'
Food
'Food"
"Food'
Fo'od
Fo'od
Fo'od
Fo"od
Fo"od
Fo"od
您可以检查它们是否匹配:
diff -s <(sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt) expected.txt
发布于 2009-04-17 08:31:08
你可以用tr
echo "$string" | tr -d 'chars to delete'
..。此外,“tr”在更老的发行版(大约是Redhat 9-ish)上也是有问题的。tr
是“翻译”的缩写,常用在管道中转换输入。-d
选项简单地表示“删除”。
大多数现代版本还包含预定义的宏,可以将宏转换为上到下、下到上、删除空白等。因此,如果您使用它,请花一秒钟时间查看它还能做什么(请参阅“帮助输出/手册”页面),派上用场。
发布于 2014-06-23 04:28:26
VAR="'FOOD'"
VAR=$(eval echo $VAR)
说明:由于shell已经理解了引号,所以您可以要求shell计算一个命令,该命令只回显引用的字符串,就像您自己键入引用的字符串时那样。
在这里,eval echo $VAR
扩展为eval echo 'FOOD'
,因为引号实际上是VAR
值的一部分。如果要将echo 'FOOD'
运行到shell中,就会得到FOOD
(没有引号)。这就是eval
所做的:它接受它的输入并像一个shell命令一样运行它。
⚠代码注入!
eval
将脚本公开给代码注入。
VAR=';ls -l‘VAR=$( $VAR)
将导致ls -l
的执行。
在这里可以注入更多的有害代码。
https://stackoverflow.com/questions/758031
复制相似问题