Входные данные:
201103 1 /mnt/hdd/PUB/SOMETHING
201102 7 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 3 /mnt/hdd/PUB/SOMET HING
201106 1 /mnt/hdd/PUB/SOMETHI NG
Желаемый вывод:
201103 01 /mnt/hdd/PUB/SOMETHING
201102 07 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 03 /mnt/hdd/PUB/SOMET HING
201106 01 /mnt/hdd/PUB/SOMETHI NG
Как я могу добавить, 0
если есть только одна цифра, например, 1
в части «день»? Мне нужен этот формат даты: ГГГГММ ДД.
\<[0-9]\>
конструкцию, которая, как мне кажется, отвечает за сопоставление однозначных цифр, но не уверена, как называется эта конструкция. Благодарю.&
в строке замены будет использоваться соответствующий LHS -sed 's/\<[0-9]\>/0&/'
<>
это граница слова в синтаксисе регулярных выражений оболочки. Если подумать, даже `sed 's / \ b [0-9] \ b / 0 & /' также работает. Спасибо вам обоим. :)<>
это особенность расширенного регулярного выражения (а не оболочки) как такового ... в зависимости от того, какую версию и какие опции вы используете,sed
иshell
может использовать как расширенное, так и стандартное регулярное выражение ... стандартное регулярное выражение\<\>
Другое решение:
awk '{$2 = sprintf("%02d", $2); print}'
источник
Вот (не sed) способ использовать bash с расширенным регулярным выражением .
Этот метод позволяет области видимости выполнять более сложную обработку отдельных строк. (т.е. больше, чем просто подстановка регулярных выражений)
выход:
источник
Я бы сделал что-то вроде этого:
Это захватывает одинокие числа, удаляет их из пробелов с группой
' ([0-9]) '
, затем помещает их обратно с 0 и пробелами' 0\1 '
.-E
Опция позволяет для современных RegEx выражений на OSX (так что вам не придется использовать"\"
так часто),-r
делает то же самое на Линукс системах я проверил.источник
источник