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

Sed 从shell变量中存储的行中删除或删除任何空字段,sed,grep,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| | | 尝试使用sed和类似的方法: 19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33

输入:

输出:

|        |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|    |  |

尝试使用sed和类似的方法:

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
您可以使用此sed:

echo $line | sed -r 's/\|\s*\|//g'
它也适用于非gnu sed,如BSD sed。

通过grep和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
…|grep-oP'(?由GNU提供)

$ 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
如果指定为变量,请使用此命令

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|

工作正常,输出正是我所期望的。不是真的,如果你有键as
|19.2°;E |
,你将在输出中丢失空白。但是如果你不介意,那很好。命令也可以工作,但|已经在输出的开头。如果你需要,只需使用
s/^//;s/$/,用于移除头部和尾部
|
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'