根据此处的其他帖子,我可以使用
添加换行符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")。
我在这里缺少什么?
答案 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”