Это обратная косая черта. Обратная косая черта снимает следующий персонаж и заставляет его потерять особый смысл. Команда sed читает то, что вы набрали как (здесь только выражение sed, я не буду делать всю утомительную командную строку оболочки):
s
<SPACE>
C
:
Literal <SPACE>
/root/
<SPACE>
Вы сказали sed, что хотите использовать в качестве маркера для выражения, которое вы ищете, и замены. Но sed надеется увидеть нечто вроде:
s
<SPACE>
C
:
Literal \
<SPACE>
/root/
<SPACE>
Чтобы сделать обратный слеш буквальным, дополните его обратным слешем:
sed -e 's C:\\ /root '
Лично я предпочел бы избежать использования пробела. Я бы использовал что-нибудь вроде |
или ;
. Но у тебя все равно были бы проблемы с обратным слешем. Что действительно забавно, так это то, что вам нужно набрать что-то, чтобы использовать обратный слеш в качестве разделителя. :)
В то время как (учитывая ваш вход) Не совсем понятно, что вы пытаетесь сделать в полной мере, проблема с выходом заключается в том, что только последняя линия, подаваемая в awk, будет напечатана Из-за того, что вы поместите печать в конце концов.
Это должно выглядеть так:
BEGIN {
RS="\n\n"; FS=" ";
}
{
print $1,$2,$3,$4,$5;
}
Примечание. Отступ - это только мои личные предпочтения.
PURE SED
One-LiLER:
sed ':X;N;s/*//;$!bX;s/\n /\t/g;:Y;s/\n\n//g;tY' $WORKFILE
Это может выглядеть довольно сложным, но в основном он удаляет все *
, а затем удаляет все новые двумя пробелами ( '\ N'
) и, наконец, удаляет двойные новинки \ N \ N
для очистки. Скорее всего, это экспрессия может быть упрощена.
Я включал вкладку \ T
вместо пробелов в качестве полевого сепаратора для лучшего количества столбцов, вывод
syopsf00 a0000096 782 1 CAStmtInv
syopsf00 a0000096 782 1 USStmtInv
syopsf00 a0000096 606 1 CAStmtInv
syopsf00 a0000096 606 1 USStmtInv
syopsf00 a0000096 23472 4 AO
syopsf00 a0000096 23472 4 Dealer
Я надеюсь, что подошвы awk
будет достаточно
awk '
/syopsf00/{print ""}
!/^[*]/{printf "%s",$0}
END{print ""}
' $WORKFILE >> $OUTPUTFILE
или если вы хотите потрите многопространства и использовать awk-scriptfile:
awk -f test.awk "$WORKFILE" >> "$OUTPUTFILE"
где test.awk
:
#!/usr/bin/awk -f
/syopsf00/{print ""}
!/^[*]/{printf ("%s",$1" "$2" "}
END{print ""}