搜索文件中的特定字符串并将其删除

搜索文件中的特定字符串并将其删除

我有以下文件:

./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"

相关内容