Невозможно удалить апостроф с помощью команды SED для текстового файла - PullRequest
1 голос
/ 07 марта 2020

Я пытаюсь извлечь числовые данные из текстового файла и использую команду SED для удаления нежелательных символов. Однако я не могу удалить случайные апострофы.

Это пример текста:

CLASSES                                            SCORES
[u'Precipitate', u'Crystals', u'Other', u'Clear']  [0.8788071274757385, 0.050357233732938766, 0.038349077105522156, 0.03248654305934906]

Это желаемый результат:

0.8788071274757385, 0.050357233732938766, 0.038349077105522156, 0.03248654305934906

Это код Я использую:

echo running

sed -i '/^CLASSES/ d' ~/Desktop/testgcloud/results.txt
sed -i -e "s/Precipitate//g" -e "s/Other//g" -e "s/Crystals//g" -e "s/Clear//g" -e "s/u//g" ~/Desktop/testgcloud/results.txt
sed -i -e "s/\[//g" -e "s/\]//g" -e "s/\'//g" ~/Desktop/testgcloud/results.txt

echo finished running

Это результат кода:

'', '', '', ''  0.8788071274757385, 0.050357233732938766, 0.038349077105522156, 0.03248654305934906

Кроме того, есть ли способ удалить первые четыре запятые в каждой строке?

Ответы [ 2 ]

0 голосов
/ 07 марта 2020
sed -i.bkp -e '/^CLASSES/d' -e 's/^\[[^]]*\]\s\+\[//' -e 's/\]$//' sample.txt
  • -e 's/^\[[^]]*\]\s\+\[//' - удалить все, что находится в первом наборе [], окружающем [] и следующем [ - демо (обратите внимание, что sed использует \+ вместо +, но все остальное идентично)
  • -e 's/\]$//' - удалить трейлинг ]
0 голосов
/ 07 марта 2020

Вместо того, чтобы удалять ненужные вещи, вы можете сосредоточиться на том, что хотите.

grep -Po '([0-9]+\.[0-9]+,? ?)+' input_file > ~/Desktop/testgcloud/results.txt

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

Если вы действительно используете sed, следующее удалит пустые апострофы и необязательные запятые и пробелы.

sed "s/'',\? \?//g"

...