【问题标题】:Is there a simple way to make multiple read commands instead of manually typing each out?有没有一种简单的方法来制作多个读取命令而不是手动输入每个命令?
【发布时间】:2021-02-25 03:26:36
【问题描述】:

所以我正在开发这个程序,该程序将从命令行读取文件并使用 sed 命令将某些模式替换为我希望更改的内容。但是,我正在使用一个函数来读取文件的每一行,然后进入我的 assign2.sed 文件进行编辑。例如,我正在使用的一个文件有 11 行,如下所示。

我的问题是,是否有一种更简单的方法来读取文件的每一行而不是手动输入;读取第 1 行,读取第 2 行,依此类推。是否可以创建一个 for-loop/while 循环,直到没有更多的行可以读取?

#!/bin/bash

for numArguments in $@; do

function readFile() {
  read line1
  read line2
  read line3
  read line4
  read line5
  read line6
  read line7
  read line8
  read line9
  read line10
  read line11
}
readFile < $numArguments

sed -r -i -f assign2.sed $numArguments

done

【问题讨论】:

  • 只需使用sed -r -i -f assign2.sed "$@"。你根本不需要函数或循环。

标签: bash loops


【解决方案1】:

是的,语法如下:

    while read VAR
    do
       #do something with line read into VAR
    done < input_file

但是您可以只使用sed -r -i -f assign2.sed "$@",因为 sed 可以将多个文件作为输入。

【讨论】:

  • 只是一个警告,以这种方式使用read 会将反斜杠视为转义字符,您可能希望将其与-r 开关一起使用。您的问题也很可能被否决,因为这在阅读的手册页中得到了清楚的证明;)。 (男人是男人最好的朋友)
  • 所以你认为不是我的 readFile 函数,而是使用 while 循环?那我试试看!并注意,下次我会尽量不要再犯同样的错误!
  • 是的,或者你可以在函数中使用循环,只要你觉得最有意义。你也可以在你的函数中只读取一次,检查 read 是否使用 `$?' 发送回状态 0?并再次递归调用该函数(如果支持递归函数,我不太记得了),但我觉得while循环最简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2012-08-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多