【问题标题】:sed replace all occurrences after charactersed 替换字符后的所有匹配项
【发布时间】:2016-07-05 12:19:45
【问题描述】:

使用sed 是否可以替换字符后一行中所有出现的模式?

因此,例如,在句号后用下划线替换每个空格会改变这个:

k i c k . t h e . b a b y

进入这个:

k i c k ._t_h_e_._b_a_b_y

谢谢!

【问题讨论】:

  • the baby 之间的点在哪里?您的示例不够清楚,无法说明您想要做什么。
  • 对不起,错字!再来看看
  • @NickBull 在. 之后的所有内容都应该有一个_ 对吧?

标签: linux replace sed


【解决方案1】:

这可能对你有用(GNU sed):

sed -r ':a;s/(\.[^ ]*) /\1_/;ta' file

将第一个 . 前面的空格替换为 _'s 或:

sed 's/\./&\n/;h;y/ /_/;H;g;s/\n.*\n//' file

利用控制空间分而治之。

【讨论】:

  • 太美了,太棒了
【解决方案2】:

有点长,我想不出更短的方法,但效果很好:

sed 'h ; s/[^.]*// ; s/ /_/g ; x ; s/\..*$// ; G ; s/\n//'
                       ^ ^ the pattern to replace

或者awk:

awk -F. -vOFS=. '{a=$1 ; $1="" ; gsub(" ","_") ; print a $0}'
                                       ^   ^ the pattern to replace

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 2017-03-20
    • 2023-02-02
    • 2020-06-23
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多