Использование awk
вместо sed
:
awk -v FS=':' -v OFS=':' '{ gsub(/\\/,"/",$1) } { print }'
Это обрабатывает данные как :
-запись с разделителями и использует gsub()
, чтобы заменить все обратные косые черты прямыми косыми чертами в первом поле. Затем он выводит измененные данные.
Я установил разделитель полей ввода ( FS
) и разделитель полей вывода ( OFS
) на :
, чтобы ввод был разделен двоеточием и чтобы двоеточие позже снова вставлялось, когда происходит вывод.
Если у вас есть текст в переменной оболочки, вы можете сделать это непосредственно в оболочке без использования каких-либо внешних утилит:
a='a\b\c\d:text\text'
b=${a%%:*} # the start of the string ("remove the first : and everything after it from $a")
c=${a#*:} # the end of the string ("remove the first : and everything before it from $a")
a="${b//\\//}:$c"
printf '%s\n' "$a"
Этот фрагмент кода напечатает строку a/b/c/d:text \text
в любой sh
-оболочке, поддерживающей расширение параметра ${parameter//pattern/string}
(расширение стандарта POSIX).
Это более или менее имитирует код awk
.