无法获得sed插入`\ n`

时间:2014-04-10 14:28:26

标签: bash sed substitution

根据此处的其他帖子,我可以使用

添加换行符
echo "aaaaCellaaaCellaa" | sed -r 's:(Cell):\n\1:g'

既可以从命令行获得,也可以作为脚本的一部分。但是,当我尝试在实际脚本中使用该片段时,我正在使用

newdata="$(iwlist wlan0 scanning)"
newstring="$(echo $newdata | tr '\n' ' ' | tr -s [:space:] | sed -r 's/(Cell)/\n\1/g' | sed -e 's:Channel\::Channel=:g' | sed -e 's: :=:g')"
echo $newstring

\n被忽略,我得到一个长行(在每个&#34之前有一个空格; Cell")。

我在这里缺少什么?

3 个答案:

答案 0 :(得分:1)

BashPitfalls #14 aka echo $foo aka Quote Your Variables

$ echo "$newstring"

$ foo=$'foo\nbar'
$ echo ${foo}
foo bar
$ echo "${foo}"
foo
bar

编辑:

$ cat t.txt
Cell 01 - Address: AB:CD:EF:12:34:56
          ESSID:"name1"
          Protocol:IEEE 802.11g
          Mode:master
          Frequency:2.417 GHz (Channel 2)
          Encryption key:on

Cell 02 - Address: AB:CD:EF:12:34:56
          ESSID:"name2"
          Protocol:IEEE 802.11g
          Mode:master
          Frequency:2.417 GHz (Channel 2)
          Encryption key:on

$ cat t.sh
#!/bin/bash

newdata="$(< t.txt)"
newstring="$(echo $newdata | tr '\n' ' ' | tr -s [:space:] | sed -r 's/(Cell)/\n\1/g' | sed -e 's:Channel\::Channel=:g' | sed -e 's: :=:g')"
echo "$newstring"

$ ./t.sh

Cell=01=-=Address:=AB:CD:EF:12:34:56=ESSID:"name1"=Protocol:IEEE=802.11g=Mode:master=Frequency:2.417=GHz=(Channel=2)=Encryption=key:on=
Cell=02=-=Address:=AB:CD:EF:12:34:56=ESSID:"name2"=Protocol:IEEE=802.11g=Mode:master=Frequency:2.417=GHz=(Channel=2)=Encryption=key:on=

答案 1 :(得分:1)

echo "aaaaCellaaaCellaa" | sed -r 's:(Cell):\
\1:g'

\ n在替换模式中不可用。另一种方法是从搜索模式中捕获它并在第二种模式中使用组替换,如

sed 'H;x;s/\(\n\)\(sample group top keep\)other stuff/\2\1/'

但不使用/ g,你需要一个循环。

答案 2 :(得分:0)

事实证明我的问题是使用      echo $ newstring 打印我的输出,省略引号(Adrian本能地包含在他的例子中)。它应该是:     echo“$ newstring”