我有命令序列来查找代码中带有“ actions / Auth”的文件。
在我使用awk分割grep输出的文件路径之后,最后我想
逐行读取,而是使用sed sed "s:from 'actions/Auth':from '../actions/Auth':"
find src/ -exec grep -R 'actions/Auth' {} \; | awk '{split($0,a,":");print a[1]}' | while IFS= read r line do echo $line done;
问题是第三个命令,因为我需要sed文件的路径。
答案 0 :(得分:2)
您缺少分号:
while IFS= read -r line; do echo $line; done;
答案 1 :(得分:1)
funkyjelly钉牢了-您需要标点符号。见下文,但-
也许这比所有的事情都简单。
grep -Fr 'actions/Auth' src/ |
while IFS=: read -r file line # hope no filename has a colon...
do sed '>your commands here>' "$file"
done
这可能比为每个文件生成单独的grep
好得多...
此外,“一个班轮”并不总是必须是字面意思。
有时,如果您将它分解,会更好地阅读。
find src/ -exec grep -R 'actions/Auth' {} \; |
awk '{ split($0,a,":"); print a[1] }' |
while IFS= read r line
do echo $line
done
请注意,除了添加空格外,我没有做任何更改。
照原样,line
将永远不会有任何东西,因为它将全部进入r
...我想应该是-r
,就像这样:
while IFS= read -r line
尽管您在做什么,正如我上面所建议的,也许应该是-
while IFS=: read -r file line
只要文件名没有冒号,数据行中就没有冒号,因为其余的输入仍将转储到最后一个变量中。