首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅使用bash /标准Linux命令去掉字符串中的单引号和双引号

仅使用bash /标准Linux命令去掉字符串中的单引号和双引号
EN

Stack Overflow用户
提问于 2009-04-16 21:02:31
回答 7查看 42.4K关注 0票数 23

我正在寻找一些可以像下面这样转换字符串的东西,只使用bash /标准Linux命令:

字符串周围的单引号应该是removed

  • Double-quotes,字符串周围的removed

  • Unquoted字符串应该保持不变,不匹配的引号应该保持

  • 字符串不变,如果不环绕字符串的remain

  • Double-quotes保持

,则不环绕字符串的same

  • Single-quotes保持不变。

例如:

“食品”应改为“食品”应成为“食品食品”食品应保持不变“食品”<代码>H 123“食品”应保持不变<代码>H 224< Fo'od

  • "Fo'od“>H 125”Fo‘od“应变为”Fo’odH 228

  • H 129仍应保持相同的H 230< Fo"od

  • "Fo"od“>H 131”od“应成为Fo”d>H 234“应保持相同的代码”<236/<<237>代码><><
  • ><
  • ><237><
  • >。

谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-16 21:24:19

这应该可以做到:

代码语言:javascript
运行
复制
sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt

其中in.txt是:

代码语言:javascript
运行
复制
"Fo'od'
'Food'
"Food"
"Fo"od'
Food
'Food"
"Food'
'Fo'od'
"Fo'od"
Fo'od
'Fo"od'
"Fo"od"
Fo"od

expected.txt是:

代码语言:javascript
运行
复制
"Fo'od'
Food
Food
"Fo"od'
Food
'Food"
"Food'
Fo'od
Fo'od
Fo'od
Fo"od
Fo"od
Fo"od

您可以检查它们是否匹配:

代码语言:javascript
运行
复制
diff -s <(sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt) expected.txt
票数 35
EN

Stack Overflow用户

发布于 2009-04-17 08:31:08

你可以用tr

代码语言:javascript
运行
复制
echo "$string" | tr -d 'chars to delete' 

..。此外,“tr”在更老的发行版(大约是Redhat 9-ish)上也是有问题的。tr是“翻译”的缩写,常用在管道中转换输入。-d选项简单地表示“删除”。

大多数现代版本还包含预定义的宏,可以将宏转换为上到下、下到上、删除空白等。因此,如果您使用它,请花一秒钟时间查看它还能做什么(请参阅“帮助输出/手册”页面),派上用场。

票数 25
EN

Stack Overflow用户

发布于 2014-06-23 04:28:26

代码语言:javascript
运行
复制
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的执行。

在这里可以注入更多的有害代码。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/758031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档