【问题标题】:Passing variable to sed for while loop [duplicate]将变量传递给sed for while循环[重复]
【发布时间】:2019-11-29 14:51:06
【问题描述】:

我想使用 shell sed 从第 n 行开始循环文件,我可以使它适用于整数(下面的示例从第 5 行开始),但我想用 sys 参数变量替换整数: linesToBegin= $1

代码如下:

sed -n '5,$ p' twitter_ids.txt | while read linecontent
do
            echo $linecontent 
done

当我用linesToBegin替换数字5时:

sed -n '$linesToBegin,$ p' twitter_ids.txt | while read linecontent

我收到一个错误提示

sed: -e expression #1, char 3: extra characters after comman

【问题讨论】:

标签: bash shell loops variables sed


【解决方案1】:
linesToBegin="$1"
sed -n "$linesToBegin,\$ p" twitter_ids.txt | while read linecontent
do
            echo "$linecontent"
done

现在应该可以工作了。只需要双引号。

【讨论】:

  • 不幸的是它对我不起作用,给了我:sed: -e expression #1, char 1: unknown command: `,'
  • @goodboy,令人惊讶的是,在我的机器上正常工作..
  • 好的,现在它正在工作,问题是我没有注意到的 sys arg 变量中的赋值有一点空间!
  • echo "$linecontent" 更好,该行可以是特殊字符,如*。更标准的是使用花括号,例如 echo "${linecontent}"。
  • 应该是while IFS= read -r linecontent。 @WalterA您对引号是正确的,但是当仅引用标量变量时,大括号仅适用于您需要将变量名称与其他字母数字文本分开时,例如echo "${foo}bar",否则无需使用它们。如果您正在执行像 echo "${foo#*.}" 这样的替换或使用像 echo "${foo[@]}" 这样的数组,那么您会使用它们,但这里不是这种情况。
猜你喜欢
  • 2017-04-01
  • 1970-01-01
  • 2019-08-13
  • 2023-04-07
  • 1970-01-01
  • 2013-10-25
  • 2020-01-21
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多