【问题标题】:How to modify the file content using sed如何使用 sed 修改文件内容
【发布时间】:2016-11-17 11:37:42
【问题描述】:

IP 文件 - 1.txt

$ cat 1.txt
'&1'
'&2'
'&3'

如果我想要 o/p 为

:1
:2
:3

使用 sed(或与此相关的任何命令),我该如何实现?

【问题讨论】:

  • 文件内容是什么?
  • 那么,您想从每一行中提取数字并在打印时在数字前添加:
  • I/P 星期一 {'&1', '早上', '早餐'} 星期二 {'&2', '中午', '午餐'} 星期三 {'&3', '晚上', ' Supper'} Thursday {'&4', 'Night', 'Dinner'} O/P Monday {:1, 'Morning', 'Breakfast'} 星期二 {:2, 'Noon', '午餐'} 星期三 {:3, '晚上', '晚餐'} 星期四 {:4, '晚上', '晚餐'}
  • edit 你的问题而不是添加评论.. 另见stackoverflow.com/editing-help

标签: linux shell unix awk sed


【解决方案1】:

您可以使用以下 2 个命令获取您的 o/p。

--> sed -e '/1/b' -e '/2/b' -e '/3/b' -e d 1.txt 或者 --> gsed '/1:2:3/!d' 1.txt

【讨论】:

    【解决方案2】:
    awk '{gsub(/'"^'"'|'"'$"'/,"");gsub(/&/,":")}1' input
    :1
    :2
    :3
    

    这里,awkgsub函数用于将单引号替换为空白,另一个gsub用于将&替换为:1 表示,在 awk 中打印。

    【讨论】:

    • 这行得通,你能解释一下它是如何工作的吗?提前致谢。因为,无论我分享了什么输入,它都在行的中间
    • @Guru24,在这种情况下,您应该提供更好的输入样本,因为很容易假设这些是该行中唯一的内容.. 另请参阅 stackoverflow.com/help/mcve
    • 更新了答案并提供了一些解释。同意@Sundeep,如果您对此不满意,需要更清楚地了解输入和预期输出。
    • 同意。我将修改 I/p 和预期的 o/p
    【解决方案3】:

    这样好吗?

    sed -e 's/.*[^0-9]\([0-9]\+\)[^0-9]*$/:\1/' 1.txt
    
    :1
    :2
    :3
    

    【讨论】:

      【解决方案4】:
      $ cat 1.txt 
      Monday {'&1', 'Morning', 'Breakfast'}
      Tuesday {'&2', 'Noon', 'Lunch'}
      Wednesday {'&3', 'Evening', 'Supper'}
      Thursday {'&4', 'Night', 'Dinner'}
      
      $ sed -E 's/\x27&([0-9]+)\x27/:\1/' 1.txt 
      Monday {:1, 'Morning', 'Breakfast'}
      Tuesday {:2, 'Noon', 'Lunch'}
      Wednesday {:3, 'Evening', 'Supper'}
      Thursday {:4, 'Night', 'Dinner'}
      
      • \x27& 匹配单引号和&(参考ASCII set
      • ([0-9]+) 捕获数字以进行反向引用
      • \x27匹配单引号
      • :\1 将匹配的模式替换为 : 和捕获的数字
      • 注意:某些sed 版本使用-r 而不是-E 来扩展正则表达式选项

      【讨论】:

        猜你喜欢
        • 2015-03-19
        • 1970-01-01
        • 2014-02-18
        • 2010-12-09
        • 2012-11-24
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多