Использование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.
Если вы хотите запустить команду с пробелами внутри, вам нужно добавить "" вокруг нее. В противном случае он просто выполнитls
Попробуйте запустить/bin/sh -c "ls -lh"