【问题标题】:How add a specific string/text in between two slash ' / ' using awk or sed [closed]如何使用 awk 或 sed 在两个斜杠 \' / \' 之间添加特定的字符串/文本 [关闭]
【发布时间】:2022-11-13 11:16:54
【问题描述】:

我在文本文件中有一个这样的 url 列表

> http://example.com/path1/example/abc/?xyz=abc 
> http://example2.com/dobu/exy/chok/?oko=ccc

我正在寻找使用 sed/awk 用特定字符串替换每个路径。

假设我想要字符串 EVIL

结果应该是这样的

http://example.com/EVIL/example/abc/?xyz=abc
http://example.com/path1/EVIL/abc/?xyz=abc
http://example.com/path1/example/EVIL/?xyz=abc
http://example2.com/EVIL/exy/chok/?oko=ccc
http://example2.com/dobu/EVIL/chok/?oko=ccc
http://example2.com/dobu/exy/EVIL/?oko=ccc

谢谢<3

【问题讨论】:

  • 你试过什么了?
  • cat primenow.amazon.co.uk.txt | grep -oP "^https?://(?:[^/]*/){2}"
  • 它根本不起作用

标签: awk sed


【解决方案1】:

我会按照以下方式利用 GNU AWK 来完成这项任务,让 file.txt 内容成为

http://example.com/path1/example/abc/?xyz=abc 
http://example2.com/dobu/exy/chok/?oko=ccc

然后

awk 'BEGIN{FS=OFS="/"}{for(i=4;i<=NF-1;i+=1){w=$i;$i="EVIL";print;$i=w}}' file.txt

给出输出

http://example.com/EVIL/example/abc/?xyz=abc 
http://example.com/path1/EVIL/abc/?xyz=abc 
http://example.com/path1/example/EVIL/?xyz=abc 
http://example2.com/EVIL/exy/chok/?oko=ccc
http://example2.com/dobu/EVIL/chok/?oko=ccc
http://example2.com/dobu/exy/EVIL/?oko=ccc

解释:我通知 GNU AWK / 既是字段分隔符(FS)又是输出字段分隔符(OFS)然后对于每一行我从第 4 个字段(path1dobu)开始迭代和endind 在从结束字段开始的第二个(NF 是字段数,所以NF 是最后一个字段的数量,NF-1 是从结束字段开始的第二个数字)。对于我访问的每个字段,我将原始值保存在名为w 的变量中,然后将字段值设置为字符串EVIL,打印更改后的行,然后通过将字段值设置为原始值来反向更改。如果您想了解更多关于RSORSNF 的信息,请阅读8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

(在 gawk 4.2.1 中测试)

【讨论】:

  • 该系统找不到指定的文件。在终端上测试,文件名相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2015-07-15
  • 1970-01-01
  • 2018-01-19
  • 2016-03-14
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多