我正在寻找一些可以像下面这样转换字符串的东西,只使用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"odexpected.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
复制相似问题