从存储在shell变量中的行中删除或删除任何空字段

时间:2014-12-06 10:51:29

标签: sed grep

输入:

|        |19.2°E|    | |Astra 1L|    |11597.00|V|26|Astra 1L|DVB-S|QPSK|22000| |5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026|    |  |

输出:

19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026

4 个答案:

答案 0 :(得分:0)

尝试使用sed之类的东西:

echo $line | sed -r 's/\|\s*\|//g'

答案 1 :(得分:0)

您可以使用此sed:

sed 's/|[[:blank:]]\{1,\}//g; s/^|//; s/|$//' file
19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026

它也适用于非gnu sed,如BSD sed。

答案 2 :(得分:0)

通过grep和sed,

..... | grep -oP '(?<=\|)[^|]*[^|\s][^|]*' | sed ':a;N;$!ba;s/\n/|/g'

示例:

$ echo '|        |19.2&deg;E|    | |Astra 1L|    |11597.00|V|26|Astra 1L|DVB-S|QPSK|22000| |5/6|ASTRA 1|, 33.8 Mbps&nbsp;|NID:1|TID:1026|    |  |' | grep -oP '(?<=\|)[^|]*[^|\s][^|]*' | sed ':a;N;$!ba;s/\n/|/g'
19.2&deg;E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps&nbsp;|NID:1|TID:1026

答案 3 :(得分:0)

由GNU sed

sed -r ':a s/\|\s*\|/|/g ;t a' infile

|19.2&deg;E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps&nbsp;|NID:1|TID:1026|

如果您指定为变量,请使用此命令

echo $line |sed -r ':a s/\|\s*\|/|/g ;t a'