如何在{}内使用sed w命令

时间:2017-07-23 17:03:47

标签: bash sed

这很好用:

myPromise.then(value => {
  console.log(value)
  // do whatever you're going to do with value
};

但如果我尝试这样的事情:

printf "%s\n" data_{1..10} | sed -n '/_2$/ s/a/e/gw file'

我明白了:

printf "%s\n" data_{1..10} | sed -n '/_2$/ { s/a/e/gw file }'

如果我将sed: -e expression #2, char 0: unmatched `{' 替换为w file,则可以在p内正常工作。这有效:

{}

那么,为什么printf "%s\n" data_{1..10} | sed -n '/_2$/ { s/a/e/gp }' 在没有w的情况下工作,为什么不在{}内呢?以及如何在{}内使用它?

2 个答案:

答案 0 :(得分:3)

w之后的所有内容都被解析为文件名。也就是说,sed正在尝试写入名为file }的文件(或者,如果开放的{具有匹配的},但它不会。)尝试添加换行符:

printf "%s\n" data_{1..10} | sed -n '/_2$/ { s/a/e/gw file
}'

答案 1 :(得分:3)

这可能适合你(GNU sed):

sed -ne '/_2$/{s/a/e/gw fileOut' -e '}' fileIn

或使用一点bash语法糖:

sed -n $'/_2$/{s/a/e/gw fileOut\n}' fileIn

但是,由于地址后面只有一个命令:

sed -n '/_2$/s/a/e/gw fileOut' fileIn

是首选方式。

或者:

sed -e '/_2$/s/a/e/gw fileOut' -e 'd' fileIn