使用 sed 查找和替换字符串

发布于 2024-12-07 12:54:43 字数 123 浏览 0 评论 0原文

我试图将文档中用单引号括起来的字符串替换为不带单引号的字符串。

'test' -> test

有没有办法使用 sed 我可以做到这一点?

谢谢

I am trying to replace strings in a document that enclosed in single quotes, to a string without.

'test' -> test

Is there a way using sed I can do this?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月下伊人醉 2024-12-14 12:54:43

这将从任何引用的单词周围删除单引号,并保留其他引号:

sed -E "s/'([a-zA-Z]*)'/\1/g" 

测试时:

foo 'bar' it's 'OK' --> foo bar it's OK

请注意,它完好无损地保留了引号。

说明:

搜索正则表达式 '([a-zA-Z]*)' 匹配用引号和方括号括起来的任何单词(字母,无空格),它捕获其中的单词。替换正则表达式 \1 指的是“group 1” - 第一个捕获的组(即搜索模式中的括号组 - 单词)

仅供参考,这是测试:

echo "foo 'bar' it's 'OK'" | sed -E "s/'([a-zA-Z]*)'/\1/g"

This will remove single quotes from around any quoted word, and leave other quotes alone:

sed -E "s/'([a-zA-Z]*)'/\1/g" 

When tested:

foo 'bar' it's 'OK' --> foo bar it's OK

Notice that it left the quote in it's intact.

Explanation:

The search regex '([a-zA-Z]*)' is matching any word (letters, no spaces) surrounded by quotes and using brackets, it captures the word within. The replacement regex \1 refers to "group 1" - the first captured group (ie the bracketed group in the search pattern - the word)

FYI, here's the test:

echo "foo 'bar' it's 'OK'" | sed -E "s/'([a-zA-Z]*)'/\1/g"
檐上三寸雪 2024-12-14 12:54:43

删除某些单词的单引号(示例中的文本):

kent$  echo "foo'text'000'bar'"|sed "s/'text'/text/g"
footext000'bar'

removing single quotes for certain word (text in your example):

kent$  echo "foo'text'000'bar'"|sed "s/'text'/text/g"
footext000'bar'
渔村楼浪 2024-12-14 12:54:43

这个怎么样?

gt; cat foo
"test"
"bar"
baz "blub"

"one" "two" three

gt; cat foo | sed -e 's/\"//g'
test
bar
baz blub

one two three

更新
由于您只想替换“test”,因此更有可能是:

gt; cat foo | sed -e 's/\"test\"/test/g'
test
"bar"
baz "blub"

"one" "two" three

How about this?

gt; cat foo
"test"
"bar"
baz "blub"

"one" "two" three

gt; cat foo | sed -e 's/\"//g'
test
bar
baz blub

one two three

Update
As you only want to replace "test", it would more likely be:

gt; cat foo | sed -e 's/\"test\"/test/g'
test
"bar"
baz "blub"

"one" "two" three
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文