Команда `/bin/sh -c ls -lh `не отображает вывод в виде списка

Использованиеsed:

$ sed 's/@\(.*\)/&|\1/' file
TEST|1234|john.doe@gmail.com|gmail.com
TEST|4533|jeffp12@yahoo.com|yahoo.com
TEST|9030|indoep13@gmx.com|gmx.com
TEST|0903|ramdpe23@gmail.com|gmail.com

Это будет соответствовать первому символу @в каждой строке и захватывать все после него с помощью группы захвата. Совпадающий текст будет заменен самим собой, за которым следует захваченный текст с символом |в -между ними.

Если ваш файл является текстовым файлом DOS (, как указано в некоторых комментариях ), то вы можете выполнить преобразование в текстовый файл Unix одной и той же командой:

$ sed -e 's/[[:cntrl:]]$//' -e 's/@\(.*\)/&|\1/' file
TEST|1234|john.doe@gmail.com|gmail.com
TEST|4533|jeffp12@yahoo.com|yahoo.com
TEST|9030|indoep13@gmx.com|gmx.com
TEST|0903|ramdpe23@gmail.com|gmail.com

Вторая замена такая же, как и раньше, но первая удалит любой управляющий символ в самом конце строки (это удалит символ возврата каретки в конце каждой строки, если он есть ). Вывод этой последней команды будет текстовым документом Unix независимо от того, был ли исходный файл текстовым файлом DOS или Unix.

-1
30.04.2021, 09:44
1 ответ

Если вы хотите запустить команду с пробелами внутри, вам нужно добавить "" вокруг нее. В противном случае он просто выполнитls

Попробуйте запустить/bin/sh -c "ls -lh"

1
28.07.2021, 11:36

Теги

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