【问题标题】:sed: make everything on matched lines lowercase to the right of a patternsed:使匹配行上的所有内容在模式右侧小写
【发布时间】:2016-09-01 11:25:37
【问题描述】:

我要做的是使用 sed 使模式右侧的所有字符小写,但仅限于包含另一个模式的行。

假设我想在包含单词 sillyduck 的行上将 /directory/ 右侧的所有内容设为小写。

之前:

sillyduck MOO/WORD/directory/THIS/FILE.TXT
sillyduck another/directory/with/a/file.DOC
#sillyduck MOO/WORD/directory/ANOTHER/FILE
sillygoose MOO/WORD/directory/THIS/FILE.TXT
SILLYDUCK MOO/WORD/DIRECTORY/THIS/FILE.TXT
sillyduck QUACK/DUCK/directory/You/Get/The/Idea.doc

之后:

sillyduck MOO/WORD/directory/this/file.txt
sillyduck another/directory/with/a/file.doc
#sillyduck MOO/WORD/directory/another/file
sillygoose MOO/WORD/directory/THIS/FILE.TXT
SILLYDUCK MOO/WORD/DIRECTORY/THIS/FILE.TXT
sillyduck QUACK/DUCK/directory/you/get/the/idea.doc

这样做的最佳方法是什么?我想坚持使用 sed 来解决问题。

提前致谢! :)

【问题讨论】:

  • 您应该在不同的上下文中包含几行带有单词“directory”两次的示例输入。在某些情况下,大多数潜在的解决方案可能无法满足您的需求。
  • 对此表示歉意。一行中第一个目录之后的任何内容都应设为小写。之前:sillyduck MOO/WORD/directory/THIS/directory/FILE.TXT 之后:sillyduck MOO/WORD/directory/this/directory/file.txt
  • 您应该将其添加到您的示例输入/输出中。

标签: sed


【解决方案1】:

鉴于您评论中的新信息:

$ echo 'sillyduck MOO/WORD/directory/THIS/directory/FILE.TXT' |
    sed '/sillyduck/ s~/directory/.*~\L&~'
sillyduck MOO/WORD/directory/this/directory/file.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多