【发布时间】:2019-10-12 21:42:48
【问题描述】:
我是各种形式的 Unix 新手,所以请放轻松! 我有一个 bash 脚本,它将带有任意文件名的 ls 命令通过管道传输到 sed,它将在文件上使用任意替换模式,然后将其通过管道传输到 awk 进行一些处理。问题是,awk 需要知道原始文件名和新文件名。
除了将原始文件名放入 awk 之外,我已经完成了所有工作。例如,假设我的文件是 test.*,而我的替换模式是 's:es:ar;',这会将每次出现的“test”更改为“tart”。出于测试目的,我只是使用 awk 来打印它收到的内容:
ls "$@" | sed "$pattern" | awk '{printf "0: %s\n1: %s\n2: %s\n", $0,$1,$2}'
其中 test.* 在 $@ 中,而模式存储在 $pattern 中。 显然,这并没有让我到达我想去的地方。输出明显是
0: tart.c
1: tart.c
2:
如果我可以让 sed 输出“test.c tart.c”,那么我将有两个用于 awk 的参数。我一直在玩这个模式无济于事,甚至将“test.c”硬编码到替换中。但当然,这只是给了我像“ttest.c art.c”这样的业余结果。 sed 是否可以记住输入,然后将其处理到输出的开头?我什至有正确的想法吗?提前致谢!
【问题讨论】:
-
最简单的事情是......您可以在 sed 中执行的所有操作都可以在 awk 中执行 - 如果您结合脚本,您的工作最终会更快,更易读。