Мне нужно удалить два "" с помощью команды sed - PullRequest
0 голосов
/ 30 мая 2019

Мне нужно удалить "" в файле

"CITFFUSKD-E0"

Я пытался sed 's/\"//.

Результат:

CITFFUSKD-E0"

Как я могу удалитьи то и другое ?

Также мне нужно удалить все, что находится за первым словом, но ввод может быть таким:

"CITFFUSKD-E0"
"CITFFUSKD_E0"
"CITFFUSKD E0"

Результат Я хочу это:

CITFFUSKD

Ответы [ 7 ]

1 голос
/ 30 мая 2019

Вы можете использовать

sed 's/"//g' file | sed 's/[^[:alnum:]].*//' > newfile

Или заключите две sed команды в один sed вызов , как @Wiimm предлагает :

sed 's/"//g;s/[^[:alnum:]].*//' file > newfile

Если вы хотите заменить inline, см. Файл редактирования sed вместо .

Объяснение

  • sed 's/"//g' file - удаляет все " символов из файла
  • sed 's/[^[:alnum:]].*//' > newfile - также удаляет все символы из строки, начиная с первого не алфавитно-цифрового символа, и сохраняет результат в newfile.
0 голосов
/ 30 мая 2019

awk '{gsub (/ ^. | .... $ /, "")} NR == 1' file

CITFFUSKD

0 голосов
/ 30 мая 2019

Множество законных способов решить эту проблему.

Я предпочитаю использовать то, что вы знаете о своих данных, для упрощения решений - обычно это вариант. Если все в вашем файле соответствует одной и той же схеме, вы можете просто извлечь первый набор встреченных заглавных букв:

sed 's/"\([A-Z]\+\).*$/\1/' file
0 голосов
/ 30 мая 2019

Если у вас есть 1 строка, вы можете использовать

grep -Eo "(\w)*" file | head -1

Для обычных файлов (начиная с двойной кавычки в каждой строке), попробуйте это

tr -c [^[:alnum:]] '"' < file | cut -d'"' -f2
0 голосов
/ 30 мая 2019

Это должно сделать все за один раз, удалить ", напечатать первую часть:

awk -F\" '{split($2,a,"-| |_");print a[1]}' file
CITFFUSKD
CITFFUSKD
CITFFUSKD
0 голосов
/ 30 мая 2019

удалить все за первым словом

sed 's/^"\([[:alpha:]]*\)[^[:alpha:]]*.*/\1/'

Совпадение с первым ". Затем сопоставьте последовательность буквенных символов. Совпадение, пока вы не найдете не алфавитный символ ^[:alpha:]. Тогда сопоставьте с остальными. Замените все это на \1 - это обратная ссылка на деталь внутри \( ... \), т.е. первое слово.

Мне нужно удалить два «» с помощью команды sed

Удалить все возможные ":

sed 's/"//g'

Извлечение строки между ":

sed 's/"\([^"]*\)"/\1/'

Удалить все, кроме буквенно-цифровых символов (цифры + a-z + a-Z, т. Е. [0-9a-zA-z]):

sed 's/[^[:alnum:]]//g'
0 голосов
/ 30 мая 2019

Не могли бы вы попробовать следующее.

awk 'match($0,/[a-zA-Z]+[^a-zA-Z]*/){val=substr($0,RSTART,RLENGTH);gsub(/[^a-zA-Z]+/,"",val);print val}' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...