Замените любую строку после последней точки с помощью TXT String.

РЕДАКТИРОВАТЬ: Расширяется до любое количество выходных строк в простом однострочном для цикла :

for ((i=1;i<=2;i++)); do cut -d: -f "$i" input | paste -sd: ; done | column -t -s:

Исходный ответ:

Вы можете сделать это как однострочное, используя замену процесса bash :

paste -sd: <(cut -d: -f1 input) <(cut -d: -f2 input) | column -t -s:

Параметр -s для вставки позволяет обрабатывать каждый файл по одному. Разделитель : , заданный в вставке , «перехватывается» параметром -s в столбце в конце, чтобы упорядочить формат выстраивая поля в линию.

Команды вырезать в двух подстановках процесса вытягивают первое поле и второе поле соответственно.

Есть ли во вводе пустые строки или нет, не имеет значения, поскольку column -t -s: очистит вывод независимо. (В исходном вводе, указанном в вопросе, были пустые строки, но с тех пор они были удалены. Вышеупомянутая команда работает независимо от пустых строк.)

Входные данные - содержимое файла с именем "input" в приведенной выше команде:

Virtual_Machine:OL6U7

ID:0004fb00000600003da8ce6948c441bd

Status:Running

Memory:65536

Uptime:17103

Server:MyOVS1.vmworld.com

Pool:HA-POOL

HA:false

VCPU:16

Type:Xen PVM

OS:Oracle Linux 6

Вывод:

Virtual_Machine  ID                                Status   Memory  Uptime  Server              Pool     HA     VCPU  Type     OS
OL6U7            0004fb00000600003da8ce6948c441bd  Running  65536   17103   MyOVS1.vmworld.com  HA-POOL  false  16    Xen PVM  Oracle Linux 6
0
25.10.2018, 15:12
1 ответ
sed 's/[^.]*$/txt/'

Или сделать это только для строк, содержащих хотя бы один.(не менять myfileнаtxt):

sed 's/\.[^.]*$/.txt/'

Чтобы также избежать замены .bashrcна.txt:

sed 's/\(..*\.\).*/\1txt/'

(на этот раз мы полагаемся на жадность .*заменить часть после последней.).

Чтобы также не заменять foo.d/myfileнаfoo.txt:

sed 's|\([^/]\.\)[^./]*$|\1txt|'

Чтобы также добавить расширение .txtк файлам, которые не имеют расширения (, включая изменение .bashrcна .bashrc.txt, но не касаясь пустых строк и строк, оканчивающихся на/):

sed 's|\([^/]\)\.[^./]*$|\1|;s|[^/]$|&.txt|'
3
28.01.2020, 02:23

Теги

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