Я написал небольшой сценарий следующим образом
#!/usr/bin/ksh
cat test |while read line1
do
echo "$line1"
done
Входной файл «test» имеет следующие строки
Kensington K64391US C \ i70 Wireless
Настольный ПК Nintendo Wii Wireless Nunchuck
\ M470 Панель слюды DeLonghi HHP1500
Нагреватель радиатора Vi \ 20
Но "\" отсутствует в выводе, который выглядит следующим образом
Kensington K64391US Ci70 Wireless
Настольный беспроводной нунчак для Nintendo Wii
M470 DeLonghi HHP1500 Mica Panel Vi20
Нагреватель радиатора
Как я могу получить "\" на выходе?
Использовать -r
вариант read
.
Из ksh
страница руководства:
В исходном режиме -r символ \ не обрабатывается специально.
Что ж, быстрый и простой ответ - заменить все одинарные косые черты во входном файле на двойные. В результате на выходе будет одна косая черта. (например: в vi используйте %s/\\/\\\\/g
Рассуждение: Обратная косая черта - это escape-символ. Он используется, чтобы указать, что «следующий символ следует рассматривать буквально», чтобы такие вещи, как звездочки, не воспринимались как что-либо, кроме звездочки. Таким образом, если поместить два из них в ряд, первый будет означать, что вторую следует использовать как косую черту.
Это приемлемо для вас или вам нужно внести изменения в сам скрипт, не затрагивая данные?
Используйте -r при чтении:
cat test.input | while read -r 'line'
do
echo "$line"
done