【问题标题】:How to replace lines that contains integers by using sed如何使用 sed 替换包含整数的行
【发布时间】:2017-10-02 15:38:42
【问题描述】:

我有一个包含两个字段的文件。第一个字段可能包含也可能不包含整数。如果它包含一个整数并且整数后面有一个点,我想操作第二个字段的一部分。所以举个例子:

301.    301+Num+Ord          # Change this one 301+Num+Card
100.    100+Num+Ord          # Change this one 100+Num+Card 
3'üncü  3+Num+Ord            # DONOT CHANGE THIS ONE
48.7    48.7+Num+Real        # DONOT CHANGE THIS ONE EITHER . is not at the end
24      24+Num+Card          # DONOT CHANGE THIS ONE No dot
4.      4+Num+Ord          #  Change this one 4+Num+Card
.        .+Punct              # DONOT CHANGE THIS ONE 

我做不到,因为我对正则表达式的了解非常有限。如果您能帮助我,我将不胜感激。谢谢

【问题讨论】:

  • edit 您的问题包含简洁、可测试的样本输入和单独的预期输出。见How to Ask
  • 为避免混淆,您应该将其作为输入文件和预期输出分别发布....并且您应该添加您尝试提问的任何内容,以免描绘成免费询问整个代码..毕竟你问问题是因为你尝试了一些东西但卡住了......

标签: linux file sed


【解决方案1】:

您能否尝试以下 awk 命令,如果这对您有帮助,请告诉我。 由于您没有告诉我们下一个要放在第二列的文本,以防万一需要更改,所以我只是采用了一个测试字符串。

awk '($1 ~ /[0-9]+\.$/){sub("Ord","Card",$2)} 1' OFS="\t" Input_file

说明: awk 默认分隔符为空格,因此$1 代表此处的第 1 列。所以我在这里检查$1 ~ /[0-9]+\./$,如果第一列中有数字,然后在最后一列有一个点(\. 表示我在这里使用转义序列来删除 DOT 的特殊含义),如果是,那么我我在这里使用awksub(substitute) 实用程序将ord 替换为第二字段中的card。然后1 表示我在这里设置条件为 TRUE 并且没有在此处提及和操作,因此默认情况下会发生操作打印。

【讨论】:

  • 其实我把它作为评论。以 # 开头的部分是我的 cmets,它们不是 file 的一部分。如您所见,每次更改一行时,我都会将 Ord 替换为 Card 并保持其余部分不变
  • 其实有个小问题。在操作之前,字段由制表符分隔,但是当它被编辑时,我猜它们现在是用空格分隔的,对吗?我怎么能改变它呢? @RavinderSingh13
  • @zwlayer,请看我的编辑,现在您可以在 Input_file 之前添加 OFS="\t" 并且它应该是 TAB 分隔的,如果您有任何进一步的疑问,请告诉我。
  • 最新版给我错误:awk: cmd. line:1: ($1 ~ /[0-9]+\./$){sub("Ord","Card",$2)} 1 awk: cmd. line:1: ^ syntax error awk: cmd. line:1: ($1 ~ /[0-9]+\./$){sub("Ord","Card",$2)} 1 awk: cmd. line:1: ^ syntax error awk: cmd. line:1: ($1 ~ /[0-9]+\./$){sub("Ord","Card",$2)} 1 awk: cmd. line:1: ^ syntax error
  • 正如你所说再次感谢
【解决方案2】:

OP 要求 sed 所以

sed -E '/^[0-9]+\.[[:space:]]/!b;s/(^.*[[:space:]]+)([^[:space:]]*$)/\1Change this one/' infile

【讨论】:

    猜你喜欢
    • 2012-06-30
    • 2021-12-30
    • 2012-02-07
    • 2013-08-22
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多