У меня есть следующий файл:

./foldername/company_users_policies_changes.txt
"terraform_automated_python","AdministratorAccess"
./foldername/company_groups_policies.txt
"terraform_automated_python","ec2fullacess"
 ........................................

Я хочу оставить только имена файлов, а не полный путь (удалить все, кроме только имени файла)

Желаемый результат:

 company_users_policies_changes
"terraform_automated_python","AdministratorAccess"
company_groups_policies
"terraform_automated_python","ec2fullacess"
 ........................................

2 ответа2

1

Ваша первая строка в желаемом выводе содержит начальный пробел, но я предполагаю, что это просто ошибка транскрипции.

Следующее найдет ./foldername/ в начале строки и заменит его ничем, и аналогично заменит .txt в конце строки ничем.

sed -i 's%^\./foldername/%%;s/\.txt$//' filename

Опция -i говорит, что нужно изменить файл «на месте» (т.е. заменить исходный файл отредактированным файлом). На некоторых платформах (в частности, * BSD, и, следовательно, также MacOS) вам нужна опция -i '' которая может быть пустой, чтобы сказать, что вы не хотите создавать файл резервной копии (или дать ему что-то вроде -i ~ чтобы сохранить исходный файл как filename~).

Нетрудно объединить два действия в одно регулярное выражение, если вы хотите убедиться, что они выполняются только тогда, когда оба условия выполняются (хотя это немного усложняет ситуацию, поскольку вам необходимо понять, как использовать обратную ссылку);

sed -i 's%^\./foldername/\(.*\)\.txt$/\1/' filename

или вы можете добавить условие к сценарию, чтобы отменить второе действие, если первое не выполнено.

-1
cat changes.txt | awk -F/ '{print $NF}' | sed -e 's/.txt\/$//' | sed -e 's/.txt//'

Выход:

changes
 group_policies_changes
aaaaaaaaaa
 role_assignemnt_changes
"ec2ssmMaintWindow","AmazonSSMMaintenanceWindowRole","ssm.amazonaws.com--ec2.amazonaws.com"
"ec2ssmRole","AmazonEC2RoleforSSM--AmazonSSMFullAccess","ssm.amazonaws.com--ec2.amazonaws.com"
 users_policies_changes
"terraform_automated_python","AdministratorAccess"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .