【问题标题】:Understanding sed command syntax and sed commands了解 sed 命令语法和 sed 命令
【发布时间】:2016-01-23 18:32:00
【问题描述】:

有人能解释一下这个sed 命令在这里做什么吗?

sed 's!^M$!!;s!\-!!g;s!\.!!g;s!\(..\)!\1:!g;s!:$!!'

似乎替换/删除了一些字符......但我无法弄清楚......这真的很复杂(我的意思是所有这些s;/gM@987654328 @ . 和其他字符)

谢谢 问候

【问题讨论】:

  • 我想我在你的另一个问题中看到了这一点:你的I 字符在输入时出现了问题:它们都是ı,这有点难以阅读。
  • 他是土耳其人,使用 ı 字符。
  • 是的,我们在这里使用 ı..是的,它可能很难阅读..抱歉.. :(

标签: bash sed


【解决方案1】:

您可以将其拆分为一系列替换:

s!^M$!!
s!\-!!g
s!\.!!g
s!\(..\)!\1:!g
s!:$!!

每个都使用!作为分隔符,所以模式是s!match!replacement!。末尾的g 表示其中一些是全局的,因此会尽可能多地发生,而不是每行只发生一次。

^ 匹配行首,$ 匹配行尾,因此第一个删除了在一行中找到的所有 Ms。

接下来的两个删除所有找到的.-. 前面需要一个斜线,以便它只匹配文字 . 而不是匹配 任何字符- 前面不需要斜线,但也不会造成任何伤害。

第四个在每 2 个字符后添加一个:,使用捕获组和反向引用。

希望你能根据我对第一个的解释弄清楚最后一个的作用!

【讨论】:

  • 再次感谢您..我猜第 5 次替换是从行中删除任何 : 字符..但它有点令人困惑..我的意思是脚本正在添加 : 第 4 次替换但用第 5 次替换删除它们.. 真的很奇怪.. 第二个问题是第 5 次替换似乎没有使用 ^ 和 $ 而第 1 次替换正在使用它们。那么第 1 次替换和第 5 次替换之间有什么区别?再次感谢您的问候
  • 不完全——它只匹配$行尾的任何:
  • 啊..对不起..我现在明白了。再次感谢
猜你喜欢
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 2014-12-13
  • 2022-07-05
相关资源
最近更新 更多