我有以下文件:
./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"
........................................
答案1
所需输出的第一行包含前导空格,但我认为这只是一个转录错误。
下面将./foldername/
在行首找到并将其替换为任何内容,同样.txt
在行末找到并将其替换为任何内容。
sed -i 's%^\./foldername/%%;s/\.txt$//' filename
该-i
选项表示“就地”修改文件(即用编辑后的文件替换原始文件)。在某些平台(尤其是 *BSD,因此也包括 MacOS)上,您需要一个-i ''
可以为空的选项,表示您不想创建备份文件(或者给它一些类似 -i 的选项~
以将原始文件另存为filename~
)。
如果您想确保只有当两个条件都为真时才会发生这两个动作,那么将这两个动作组合成一个正则表达式并不难(尽管这会使事情稍微复杂化,因为您需要了解如何使用反向引用);
sed -i 's%^\./foldername/\(.*\)\.txt$/\1/' filename
或者您可以向脚本添加一个条件,当第一个操作不成功时放弃第二个操作。
答案2
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"