Видаліть кодові рядки в рядку


10

Як видалити набір косів у bash:

a,b,c,d,,,,
1,2,3,,,,

Бажаний вихід:

a,b,c,d
1,2,3

Спробував це зробити:

 grep "5628" test.csv | sed 's/,*$//g'

але це не працює. Файл спочатку надходив із машини Windows.


2
Ви впевнені, що це не спрацювало? Яку повну команду ти виконував?
cuonglm

Позитивний. Це не сталося.
користувач2980702

Чи можете ви надати свою точну команду, будь ласка, ( sedпоказане вами без назви файлу функціонує як фільтр і не обробляє файл на місці )
roaima

grep "5628" test.csv | sed 's /, * $ // g'
користувач2980702

2
Якщо вам потрібно використовувати файл у * nix, і вам не потрібно мати змогу копіювати його назад у Windows, у перспективі може бути простіше перетворити закінчення рядка з CR / LF в NL з dos2unixчимось подібним .
G-Man каже: "Відновіть Моніку"

Відповіді:


13

Повторіть команду, яку ви надали:

grep "5628" test.csv | sed 's/,*$//g'

Це виведе рядки, що збігаються з "5628", з усіма видаленими кінцевими комами. Він не оновить файл test.csv.

Однак ви вказали, що файл походить з машини Windows, тому закінчення рядків CR / NL замість просто NL. Результатом є те, що в кінці рядка є прихований CR, і вам замість цього потрібен командний рядок:

grep "5628" test.csv | sed 's/,*\r*$//'

Насправді, ви можете просто це в одній команді:

sed -n '/5628/s/,*\r*$//p' test.csv

Я не намагаюся робити оновлення на місці. Просто потрібен вихід без коми
user2980702

Це спрацювало. Дякую. Тому ми шукаємо кілька коми (, *) перед поверненням перевезення в кінці файлу (\ r * $). Чи правий я ?
користувач2980702

\r*Дозволяє нульового або більш-CR символів (так він буде продовжувати працювати з Unix / Linux отриманих файлів). Я вважаю за краще використати \r?для позначення одного необов'язкового CR, але я не міг запам'ятати прапор, sedщоб сказати йому використовувати ERE вгорі голови. Я думаю, що це -rнеперевірено. Це ,*ваше і відповідає нулю або більше коми.
roaima

gне потрібно в цьому випадку тер тільки один кінець визначається$
NeronLeVelu

2
sed -n '/5628/ s/,*\r*$//p' test.csv

(а не ОП, які вимагають лише видалити кінцеву кому). Це уникне процес переробки трубопроводів, sed безпосередньо бере фільтр та перетворення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.