【问题标题】:Using sed to add character [duplicate]使用 sed 添加字符 [重复]
【发布时间】:2014-12-18 11:05:36
【问题描述】:

我正在为一个大文件在行尾添加一个字符。每行有一个 IP 网络的 3 个八位字节,以句点和换行符 (\n) 结束。我在 cygwin 工作。

10.23.34.

23.34.45.

我正在尝试使用sed 为我完成工作;我试过以下两个命令都没有成功:

sed 's/\n/1\n/' <filename>

sed 's/\n/1\n/g' <filename>

sed 's/(.*)/${1}1/' <filename>

我已经通过 perl -pe 's/(.*\.)/${1}1/' &lt;filename&gt; 让它在 perl 中工作

请问我做错了什么?

谢谢

【问题讨论】:

  • 你的预期输出是什么?
  • 预期输出为 10.23.34.1、23.34.45.1 等。只需将 1 附加到已经在 X.Y.Z 中的每行的末尾。格式

标签: regex perl sed cygwin


【解决方案1】:

sed 默认逐行工作(所以最后没有新行)

sed 's/$/1/' YourFile

做你的伎俩,但没有任何 chekc(所有行必须有一个以点结尾的 IP 的 3 个八位字节开始),也许一些小检查很有用

sed '/\([0-9]\{1,3\}\.\)\{3\} *$/ s/ *$/1/'

验证该行是否以 3 个数字(1 到 3 位)结尾,每个数字由一个点分隔,最后是一些尾随空格。在这种情况下,添加您的 1 并删除尾随空格。

【讨论】:

    【解决方案2】:

    在每行末尾添加foo

    sed 's/$/foo/' filename > new_filename
    

    原地替换:

    sed -i 's/$/foo/' filename
    

    【讨论】:

    • 谢谢!!我不敢相信我没有意识到我可以使用 s/$/1 来做到这一点。
    • $ 表示行的enf。
    猜你喜欢
    • 2015-02-03
    • 2019-12-11
    • 1970-01-01
    • 2022-11-02
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多