У меня есть список записей, которые начинаются с 2 чисел, тире, 2 чисел и одиночного пробела. Например (отмечают пространство после чисел):
87-17
Я должен изменить вышеупомянутое на 87-17<tab>
(где <tab>
представьте фактический символ табуляции). Я не знаю, как выписать это. Я знаю, что это просто, но я нисколько не знаком с Linux, я - просто непритязательный графический дизайнер...
Если Вы имеете просто, что пространство в конце можно использовать tr
:
< file tr ' ' '\t' > file1
или sed
:
sed -i 's/ /\t/' file
, Если существуют другие пробелы, которые не должны быть заменены:
sed -i 's/ $/\t/' file
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 ]
$
утверждают положение в конце строки
Можно использовать tr для преобразования символов. В следующем примере я преобразовал пробелы во вкладку.
echo '22-12 11-12' | tr ' ' '\t'
22-12 11-12
Вы могли использовать 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
сокращение от цифр.