Как удалить апостроф (') из нескольких столбцов.CSV файла?

4
11.09.2013, 01:02
2 ответа

Можно сделать это с awk, Идея состоит в том, чтобы выполнить команду замены на столбцах 3 и 4 для замены одинарной кавычки пробелом. Здесь \047 представляет восьмеричный код для '.

 awk -F, -v OFS=, '{sub(/\047/, "", $3); sub(/\047/, "", $4); print}' file.txt
4
27.01.2020, 20:52
  • 1
    я - просто новичок в sed и awk Вы могли объяснить часть замены в своем коде выше? Перепутанный с наклонной чертой влево и наклонной чертой вправо используется.Заранее спасибо. –  Dhruuv 10.09.2013, 21:37
  • 2
    @Dhruuv, если немного легче и если Ваше требование переводит в разделение всех одинарных кавычек из файла независимо от их положения, я добавил a tr альтернатива. Отметьте 047 представляет восьмеричное значение для ' –  iruvar 10.09.2013, 21:51
  • 3
    tr сделал бы это более сложным, поскольку я не хочу, чтобы апострофы в других столбцах были заменены. –  Dhruuv 10.09.2013, 22:12
  • 4
    @Dhruuv, замененный исходный awk, кодирует с readabl версией. Здесь \047 представляет восьмеричный код для '. Так замена ' с пробелом в полях 3 и 4 и затем печатают строку –  iruvar 10.09.2013, 22:51

Используйте другую кавычку quaracter

sed "s/'//g" file

или заключение в кавычки конца, выйдите из апострофа и начните заключать в кавычки снова

sed 's/'\''//g' file

в этом случае нет никаких кавычек, необходимых за исключением апострофа что hasa особое значение для оболочки

sed s/\'//g file

это может также быть сделано с помощью двойных кавычек

sed s/"'"//g file

Я понял после того, как я прочитал комментарии в это сообщение, что я не решил исходный вопрос, но исправил команду postet в комментарии OP.

2
27.01.2020, 20:52
  • 1
    Спасибо за различные ответы. Я пытался использовать первый код, и он бросает меня ошибка как ниже sed: -e expression #1, char 5: unterminated s command второй код хорошо работал, но код должен быть изменен в sed 's/'\''//g' file Третий также хорошо работал, но код должен быть изменен в sed 'sed s/\'//g file –  Dhruuv 10.09.2013, 21:32
  • 2
    Сначала каждому нужен другой / –  Kevin 10.09.2013, 21:43
  • 3
    @miracle173, @Kevin: работы кода, но это заменяет все апострофы в файле... Есть ли путь, я могу заменить апострофы только в 3-х и 4-х полях использования файла sed? Используя awk это может быть сделано как решение, указанное @1_CR... –  Dhruuv 10.09.2013, 23:03
  • 4
    @Dhruuv Да, это может быть сделано в sed, но это не симпатично. Вы более обеспечены с awk, это было разработано для файлов разделенного текста как это. В случае, если Вы действительно хотите видеть, sed 's/\([^,]*,[^,]*,\)'\''\([^,]*,\)'\''/\1\2/' test.in или sed -E "s/(([^,]*,){2})'([^,]*,)'/\1\2/" test.in (В зависимости от Вашей sed версии Вы, возможно, должны измениться -E кому: -r). –  Kevin 10.09.2013, 23:13
  • 5
    @Kevin: Спасибо Kevin, очень услужливый... Я просто хотел видеть, можем ли мы достигнуть этого в sed только для столбцов 3 и 4... Я продолжу awk затем... :) –  Dhruuv 10.09.2013, 23:44

Теги

Похожие вопросы