Bash Can';不要用IFS和read来阅读

Bash Can';不要用IFS和read来阅读,bash,Bash,我有一系列命令来查找代码中带有“actions/Auth”的文件。 在我使用awk分割grep输出的文件路径之后,最后我想 逐行阅读并使用sedsed“s:from'actions/Auth':from'../actions/Auth':“ 问题是第三个命令,因为我需要文件的sed路径。您缺少分号: while IFS= read -r line; do echo $line; done; 您缺少分号: while IFS= read -r line; do echo $line; done;

我有一系列命令来查找代码中带有“actions/Auth”的文件。 在我使用awk分割grep输出的文件路径之后,最后我想 逐行阅读并使用sed
sed“s:from'actions/Auth':from'../actions/Auth':“


问题是第三个命令,因为我需要文件的sed路径。

您缺少分号:

while IFS= read -r line; do echo $line; done;

您缺少分号:

while IFS= read -r line; do echo $line; done;

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
请注意,除了添加空格外,我没有做任何更改。
照目前的情况,
永远不会得到任何东西,因为它将全部进入
r
…我认为应该是
-r
,如下所示:

  while IFS= read -r line
不过,正如我上面所建议的,对于你正在做的事情,也许应该是这样-

  while IFS=: read -r file line

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

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
请注意,除了添加空格外,我没有做任何更改。
照目前的情况,
永远不会得到任何东西,因为它将全部进入
r
…我认为应该是
-r
,如下所示:

  while IFS= read -r line
不过,正如我上面所建议的,对于你正在做的事情,也许应该是这样-

  while IFS=: read -r file line
只要文件名没有冒号,数据行中是否有冒号就无关紧要,因为其余输入仍将转储到最后一个变量中