无法使用IFS读取和读取

时间:2019-02-19 10:48:02

标签: bash

我有命令序列来查找代码中带有“ 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文件的路径。

2 个答案:

答案 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

只要文件名没有冒号,数据行中就没有冒号,因为其余的输入仍将转储到最后一个变量中。