在一定范围的行中用sed替换换行符

时间:2014-04-02 11:32:12

标签: sed

是否可以用sed替换某个行位置范围内的/ n(例如空格)?

以下是没有范围过滤器的示例。是否可以在sed中设置范围?

for f in `find ${_filedir} -type f`
do
  #replace all LF with spaces
  sed 's/\n/ /g' ${f} > ${f}.noCR
done

好的,这是一个示例:

我们采取一些措辞:

“我想现在挣脱”
“朋友会成为朋友”

我想用0到16范围内的“m”替换任何“n”,结果是:

我现在要打破免费” “ Amd friemds将成为朋友”

1 个答案:

答案 0 :(得分:2)

再次编辑

尝试awk

awk '{l=substr($0,1,10);r=substr($0,11);gsub(/n/,"m",l);print l r}' file

其中l是字符串的左侧部分,r是右侧,gsub()是全局替换。

<强>被修改

我可能会使用Bash参数替换 - 文档here

#!/bin/bash
while read line
do
   left=${line:1:16}    # Get left 16 chars
   right=${line:17}     # Get remainder of line
   left=${left//n/m}    # Do global replacement in left part
   echo $left $right    # Show output
done < file

原始回答

当然,就在第2-8行

sed '2,8s/foo/bar/' file

或者,在开始和结束模式之间:

sed '/start/,/end/s/foo/bar/' file