Удостоверьтесь, что присоединились к критическим спискам рассылки OpenBSD, которые будут сделаны знающий об обновлениях, и фиксирует.
Вы могли попробовать awk:
echo "78@54@this@15@23
65@22@is@92@16
34@12@an@14@18
13@42@example@52@22" |
awk -F@ '{print "\""$1"\"@"$2"@\""$3"\"@"$4"@"$5}'
"78"@54@"this"@15@23
"65"@22@"is"@92@16
"34"@12@"an"@14@18
"13"@42@"example"@52@22
Немного более подробный, но я записал бы этот awk:
awk -F@ -v OFS=@ '
function quote(x) {return sprintf("\"%s\"", x)}
{print quote($1), $2, quote($3), $4}
'
Я думаю, что awk решение, вероятно, лучше, но можно также использовать sed
:
sed -r 's/(\d+)@(\d+)@(\w+)(.*)/"\1"@\2@"\3"\4/' /path/to/your/file
Это - в основном соединение двух предыдущих ответов awk
`awk -F@ -vOFS=@ -vq='"' '{print q$1q, $2, q$3q, $4}`
В awk: добавьте кавычки вокруг первых трех полей, затем распечатайте строку.
awk -F @ '{for (i = 1; i <= 3; i++) $i = "\"" $i "\""; print}'
-F @
устанавливает разделителя полей на @
. Цикл добавляет кавычки вокруг первых трех полей. Финал print
(короткий для print $0
) печатает строку с измененными полями; $0
восстановлен каждый раз, когда отдельные поля ($1
, $2
, …), изменяются.
'\'
после канала|
... На самом деле у Вас могут быть пробел и/или комментарий после|
. У Вас может даже быть несколько строк комментариев между|
и команда. – Peter.O 25.03.2012, 17:33