【问题标题】:Insert a word at beginning of line在行首插入一个单词
【发布时间】:2015-04-23 12:10:19
【问题描述】:
this is message1;num:10;
this is message2;num:20;

我想搜索num:;之间的值,即1020,并插入到行首。

输出应该是:

10 this is message1
20 this is message2

如何使用 shell 脚本来做到这一点?

【问题讨论】:

  • 脚本怎么写?
  • @TaherKhorshidi 还有一个没有尝试的低质量问题:)

标签: shell awk sed grep


【解决方案1】:
$ awk -F'[;:]' '{print $3, $1}' file
10 this is message1
20 this is message2

【讨论】:

  • 请为您的答案添加一些解释。
  • 不,这是基本的 awk。如果在阅读手册后某些部分不清楚,请提出问题。
  • 酷!我不知道你能做到-F'[;:]'!谢谢!我也应该去阅读手册:)
  • @tommy.carstensen 仅供参考,您可以在任何 awk 中使用任何正则表达式作为 FS。在 GNU awk 中,您还可以使用任何正则表达式作为 RS,而在所有其他 awk 中,RS 只能是单个字符。
【解决方案2】:

使用 sed:

sed -e 's/\(.*\);num:\([^;]\+\);/\2 \1/'

如果您的 sed 实现支持扩展正则表达式,您可以使其更具可读性:

sed -re 's/(.*);num:([^;]+);/\2 \1/'

第一对括号记住消息,第二对括号记住数字。然后该行被两个记住的字符串以相反的顺序替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 2019-02-16
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多