Как я могу изменить пространство ##-## на ##-## вкладку?

У меня есть список записей, которые начинаются с 2 чисел, тире, 2 чисел и одиночного пробела. Например (отмечают пространство после чисел):

87-17 

Я должен изменить вышеупомянутое на 87-17<tab> (где <tab> представьте фактический символ табуляции). Я не знаю, как выписать это. Я знаю, что это просто, но я нисколько не знаком с Linux, я - просто непритязательный графический дизайнер...

2
задан 20 July 2015 в 18:54

4 ответа

Если Вы имеете просто, что пространство в конце можно использовать tr:

< file tr ' ' '\t' > file1

или sed:

sed -i 's/ /\t/' file

, Если существуют другие пробелы, которые не должны быть заменены:

sed -i 's/ $/\t/' file
2
ответ дан 2 December 2019 в 01:30

Используя awk

  • , Если у Вас действительно есть только что-то вроде этого 87-17<space> в Вашем файле

    awk '/ $/ {printf "%s\t\n",$1}' foo > bar
    
  • , если не

    awk '/[0-9][0-9]-[0-9][0-9] $/ {printf "%s\t\n",$1}' foo > bar
    
<час>

Используя gawk

, Возможно, необходимо установить gawk первый

sudo apt-get install gawk

После этого

gawk '{print gensub(/^([0-9]{2}\-[0-9]{2})\s$/,"\\1\t","g")}' foo > bar
<час>

, Объяснение

  • ^ утверждает положение в начале строки

  • , 1-я Группа фиксации ([0-9]{2}\-[0-9]{2})

    • [0-9]{2} соответствует отдельному символу, существующему в списке ниже

      Квантор: {2} Точно 2 раза

      0-9 отдельный символ в диапазоне между 0 и 9

    • \- соответствия символ - буквально

    • [0-9]{2} соответствуют отдельному символу, существующему в списке ниже

      Квантор: {2} Точно 2 раза

      0-9 отдельный символ в диапазоне между 0 и 9

    • \s соответствие любой пробельный символ [\r\n\t\f ]

    • $ утверждают положение в конце строки

1
ответ дан 2 December 2019 в 01:30

Можно использовать tr для преобразования символов. В следующем примере я преобразовал пробелы во вкладку.

echo '22-12 11-12' | tr ' ' '\t'
22-12   11-12
0
ответ дан 2 December 2019 в 01:30

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

sed -ir 's/^([0-9]{2}-[0-9]{2}) /\1\t/' file

Объяснение

sed "потоковый редактор". Думайте о нем как о простом языке программирования, прежде всего, разработанном для редактирования текста. -i опция позволяет Вам отредактировать файл на месте. Выполните команду без -i сначала для проверки это приводит к желаемому результату (файл останется неизменным), и затем выполните его с -i сохранять изменения. -r включает расширенные регулярные расширения, который, в этом случае, упрощает формат.

s/foo/bar/ "оператор замены". Это заменит первую инстанцию foo на каждой строке с bar. Здесь, мы подаем его регулярное выражение, которое означает "соответствие начало строки (^), затем две цифры ([0-9]{2}), минус -, еще 2 цифры и затем пространство. Поскольку этот шаблон является внутренними круглыми скобками, он "получен" и сделан доступный как \1. Поэтому команда заменит его собой сопровождаемый вкладкой (\t).

Или perl:

perl -i -pe 's/(\d{2}-\d{2}) /\1\t/' file

Объяснение

Это очень похоже на sed выше, но использование perl, другой язык сценариев. -i имеет ту же функцию, как она делает для sed. -p означает, "печатают каждую строку после применения сценария, данного -e к нему.

Оператор замены является снова тем же только, что здесь мы можем использовать \d сокращение от цифр.

6
ответ дан 2 December 2019 в 01:30

Другие вопросы по тегам:

Похожие вопросы: