Имя файла подстроки в Unix с помощью команды sed - PullRequest
2 голосов
/ 15 октября 2019

Я хочу подставить имя файла в unix с помощью команды sed.

Имя файла: Test_Test1_Test2_10082019_030013.csv.20191008-075740

Я хочу символы после 3-го подчеркивания или (все символы послеTest2) мне нужно напечатать.

Можно ли это сделать с помощью команды sed?

Я пробовал эту команду

sed 's/^.*_\([^_]*\)$/\1/' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740' 

, но это дает результат как030013.csv.20191008-075740 Мне это нужно от 10082019_030013.csv.20191008-075740

Спасибо, Неха

Ответы [ 3 ]

3 голосов
/ 15 октября 2019

Чтобы удалить с начала до включения 3-го подчеркивания, вы можете использовать

sed 's/^\([^_]*_\)\{3\}//' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740'

. При этом удаляется начальная часть, состоящая из 3 групп (любое количество символов, не являющихся подчеркиванием, после которых следует подчеркивание),Результат:

10082019_030013.csv.20191008-075740

Если вы используете GNU sed, вы можете переключить его на расширенные регулярные выражения и пропустить обратную косую черту.

sed -r 's/^([^_]*_){3}//' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740'
2 голосов
/ 15 октября 2019

Не могли бы вы попробовать следующее.

sed 's/\([^_]*\)_\([^_]*\)_\([^_]*\)_\(.*\)/\4/'  Input_file

Или в соответствии с хорошим предложением Бодо:

sed 's/[^_]*_[^_]*_[^_]_\(.*\)/\1/' Input_file
0 голосов
/ 16 октября 2019

Это может сработать для вас (GNU sed):

sed 's/_/\n/3;s/.*\n//;t;s/Test2/\n/;s/.*\n//;t;d' file

Заменить третий _ новой строкой, а затем удалить все, вплоть до первой новой строки. Если это удастся, выручите и распечатайте результат. В противном случае попробуйте тот же метод с Test2 и, если это не удастся, удалите всю строку.

...