Использование awk
awk -i inplace -F'|' '{OFS="|"; $3=""; gsub(/\|\|/,"|",$0)}1' a.txt
Демонстрация:
$cat a.txt
col1|col2|col3|col4|col5|col6|col7
a|b|c|d|m|n|o
e|f|g|h|p|q|r
i|j|k|l|s|t|u
$awk -i inplace -F'|' '{OFS="|"; $3=""; gsub(/\|\|/,"|",$0)}1' a.txt
$cat a.txt
col1|col2|col4|col5|col6|col7
a|b|d|m|n|o
e|f|h|p|q|r
i|j|l|s|t|u
|
$
Объяснение:
-i inplace
<- внести изменения в файл </p>
-F'|'
<- установить входной файловый разделитель как <code>|
OFS="|"
<- установить исходный разделитель полей как <code>|
$3=""
<- установить столбец 3 пусто </p>
gsub(/\|\|/,"|",$0)
<- заменить <code>|| на |
Редактировать: Используя sed
sed -i 's/[^|]*|//3' a.txt
Демонстрация
$cat a.txt
col1|col2|col3|col4|col5|col6|col7
a|b|c|d|m|n|o
e|f|g|h|p|q|r
i|j|k|l|s|t|u
$ sed -i 's/[^|]*|//3' a.txt
$cat a.txt
col1|col2|col4|col5|col6|col7
a|b|d|m|n|o
e|f|h|p|q|r
i|j|l|s|t|u
$
Пояснение "
$echo "a|b|d|m|n|o" | sed -e's/[^|]*|/(&)/'
(a|)b|d|m|n|o
$
[^|]
- Любой символ, кроме |
*
- Ноль или больше вхождений
3
3-й случай