【问题标题】:Bash script using SED and nextline [closed]使用 SED 和 nextline 的 Bash 脚本 [关闭]
【发布时间】:2016-06-07 10:21:04
【问题描述】:

我有两个文件,file1.txtfile2.txt。我想使用 sed 并在 bash 脚本中读取行。我想用file2.txt 中的第1 行替换file1.txt 中的第1 行user,依此类推...

file1.txt:

xxxx1 <br>
xxxx2 <br>
xxxx3

file2.txt:

{"Something":null,"ID":"user","group":{"id":"group1") <br>
{"Something":null,"ID":"user","group":{"id":"group1") <br>
{"Something":null,"ID":"user","group":{"id":"group1")

新的file2.txt应该是这样的:

{"Something":null,"ID":"xxxx1","group":{"id":"group1") <br>
{"Something":null,"ID":"xxxx2","group":{"id":"group1") <br>
{"Something":null,"ID":"xxxx3","group":{"id":"group1")

有什么好主意吗?

【问题讨论】:

  • 这是您的一组很好的要求。你坚持哪一部分?你有什么代码可以给我们看吗?
  • awk 中将是微不足道的。
  • 也许 awk 更好,有什么建议吗?

标签: bash shell sed


【解决方案1】:

使用awk很容易:

awk 'NR == FNR { user[FNR] = $1; next } { sub("user", user[FNR]); print }' file1.txt file2.txt

不过,您也可以使用pastesed 来实现:

paste file1.txt file2.txt | sed -r 's/([^ ]+)([^{]+)(\{.*)user(.*)/\3\1\4/'

【讨论】:

    【解决方案2】:

    试试下面的命令:

     for data in `awk '{print NR":"$1}' file1.txt` ; do row=`cut -d":" -f1 <<< ${data}` ;user=`cut -d":" -f2 <<< ${data}` ;sed -i ''$row's/"user",/"'$user'",/g' file2.txt ; done
    

    【讨论】:

    • 这是一个效率极低的循环。单个 awk 调用可以完成所有工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多