【发布时间】:2018-08-07 19:40:29
【问题描述】:
我在第 5 个字段中有一个带有 URL 的管道分隔 CSV,我希望使用 awk 命令复制问号字符之前的所有内容并添加一个包含内容的新列。我目前使用的命令是:
cat test.log | awk -F\| -v OFS=\| '{sub(/\?(.*)/,OFS "&", $7); print}' > test2.log
这有几个问题:
当前命令中的正则表达式用于查找问号之后的所有内容。之前查找所有内容的适当正则表达式是 /[^?]* 但是我在尝试在命令中使用它时遇到语法错误。我对此并不担心,因为我可以通过更多测试来解决它。
上面的命令创建了一个新列,其中的数据与正则表达式匹配,但是它从列中删除它而不是复制它。
这是我正在寻找的示例:
||||test.com|moredata|
||||test2.com?p1=1|moredata|
||||test3.com?p1=1&p2=2|moredata|
变成:
||||test.com|moredata|test.com
||||test2.com?p1=1|moredata|test2.com
||||test3.com?p1=1&p2=2|moredata|test3.com
是否有一个行为相似但没有替代的函数更适合这个(即匹配?)提前谢谢!
【问题讨论】:
-
不应该是
test2.com?p1=1|test2.com| -
确实.. 代码标签有问题并手动键入每一行。谢谢!
-
发布出现错误的代码。看起来您只是缺少正则表达式末尾的
/。