2013-11-20 2 views
0

Снова с другим вопросом.Функция редактирования файла командной строки UNIX

файл я прямо сейчас имеет следующий формат:

1234, 
1234, 
1-23-4 

Я хотел бы сделать две вещи с этим файлом.

Во-первых, удалите символы - в третьей строке. Поэтому 1-23-4 ==>1234.

Во-вторых, я хотел бы сделать все печать в одной строке.

Конечный результат должен выглядеть следующим образом:

1234,1234,1234 

ли команды это возможно с помощью строки в скрипте? Добрый совет.

Заранее благодарим за ваше время и помощь.

ответ

4

С tr:

$ tr -d '\n-' < a | sed 's/$/\n/' 
1234,1234,1234 

Чтобы удалить дефис:

$ tr -d '-' < file 
1234, 
1234, 
1234 

И то же самое относится и к новым линиям с \n.

Поскольку мы удаляем все новые линии, он будет пропускать финишную. Чтобы восстановить его, мы используем sed.

$prompt tr -d '\n-' < a 
1234,1234,1234$prompt 

$ tr -d '\n-' < a | sed 's/$/\n/' 
1234,1234,1234 

Благодаря fedorqui.I попытался это. Я заменил файл своим именем, но он не создает для меня новый файл с окончательным форматом. Извините, я думаю Я должен был упомянуть об этом в вопросе. Виноват.

Нет проблем. Вам просто нужно перенаправить его:

$ tr -d '\n-' < a | sed 's/$/\n/' > new_file 
$ cat new_file 
1234,1234,1234 
+0

+1, хотя вы _may_ нужно положить отделочный строку обратно. – paxdiablo

+0

Спасибо fedorqui.I попробовал это. Я заменил файл своим именем файла, но он не создает для меня новый файл с окончательным форматом. Извините, я думаю, что должен был упомянуть об этом в вопросе. Виноват. – Manus

+0

Да, это правда @paxdiablo, я обновил его с помощью 'sed'. Кстати, поздравляю за 300K, это так много :) – fedorqui

1

tr был хорошим.

Anotherway в Perl:

perl -pne 's/[-\n]//g' your_file 
  • -n -> это будет действовать как время цикла для каждой строки в файле.

  • -e -> вещь после этого - не что иное, как выражение, которое будет действовать на каждую строку.

  • -p -> распечатать каждую строку после того, как выражение выполнено на каждой строке.

    s/поиск/замена/г

  • s/ поиск либо символа новой строки или «-»/заменить пустой символ/г для всех вхождений в строке.

+0

Спасибо, Виджай. Но я не знаю, как использовать PERL. Будем иметь в виду, когда я изучаю язык. – Manus

+0

Я буду экспериментировать с вами, чтобы быть более комфортным для вас. – Vijay

+0

@ Vijay Я просто отформатировал ваш ответ немного, чтобы перечислить все варианты. Надеюсь, ты не против. – fedorqui

1

(ГНУ) AWK:

awk -v RS="\0" 'gsub(/[\n-]/,"")' file 

тест

kent$ echo "1234, 
1234, 
1-23-4"|awk -v RS="\0" 'gsub(/[\n-]/,"")' 
1234,1234,1234 
+0

Спасибо, kent. Я попробую этот вариант и обновить поток. @ Решение fedorqui работало для меня, и я уверен, что это тоже будет. – Manus

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