2016-09-17 4 views
1

У меня есть файл, содержащий следующую информациюUnix Shell сценариев удаления - из файла

job, cost_code, laborcost,materialcost  
202-12-21, 23-94-23, **110.00-**, 120.04  
204-12-21, 23-93-23, 520.00, **120.04-**  
204-12-12, 24-93-23, 155.00, **120.04-** 

Есть несколько проблемных записей конкретно те, которые имеют -знак в конце линии (помеченной **, которая не является действительно там в файле).

Я пытаюсь удалить знак с регулярным выражением, но у меня возникли проблемы с совпадением только количества, которое имеет проблему.

+0

'tr' не подходит для этого, его можно использовать только для удаления или замены' -' везде. – tripleee

ответ

0

Попробуйте это, эта команда удаляет дефис в конце строки

sed s'/-$//' 
echo "204-12-21, 23-93-23, 520.00, 120.04-" | sed s'/-$//' 
0

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

sed -i~ 's/\([0-9]\)-,/\1,/g;s/-$//' input.csv 

Первое выражение находит цифру с последующим -, и заменяет его цифрой и запятая; второе выражение удаляет штрихи на концах строк.

+0

Большое спасибо – meso

+0

@meso: thank you = upvote/accept. – choroba

+0

по какой-то причине команда не работает для конца позиции, я пробовал разные варианты, но все же не работает никаких мыслей? – meso

0

Это может работать для вас (GNU СЭД):

sed -r 's/-(,|$)/\1/g' file 

Удалить дефис перед запятой или дефиса из последнего поля строки.

Смежные вопросы