如何解析.txt文件中的每一行,以删除文件每一行中给定标志/
之后第二次出现jdk
之后的所有内容。
例如
/usr/lib/jvm/jdk-1.7.0/2.0/zi/etc/GMT
/usr/lib/jvm/jdk1.7.2/3.0/zi/etc/GMT
/usr/share/servertool-java-openjdk/4.0/jce.jar
成为
/usr/lib/jvm/jdk-1.7.0/2.0/
/usr/lib/jvm/jdk1.7.2/3.0/
/usr/share/servertool-java-openjdk/4.0/
请注意,我不能只对jdk进行拆分,因为它可能是jdk-1.*.*/ etc.
我的最终目标是在受到严格限制的SeLinux盒子上找到所有唯一路径,该盒子上有一个locate jdk的输出存储在output.txt文件中
更新:到目前为止,我要尝试接近的尝试是
cat output.txt | awk -F '\\jdk' '{print $1"jdk"}' | sort -u
这只会在jdk之后砍掉所有内容,并删除重复项。
答案 0 :(得分:3)
sed
是非常适合此工作的工具。您将使用s///
命令删除要删除的行的一部分。
请注意,s///
命令中的斜杠可以更改为其他字符,这样,图案中的斜杠或替换零件就无需转义。
您的模式将是:
替换将是捕获的文本。
您将要参考sed manual
答案 1 :(得分:2)
如果要替换为同一文件,可以使用以下脚本
#!/bin/bash
cat output.txt | while read line
do
x=${line#/*jdk*/*/}
replace=${line%${x}}
sed -i "s|$line|$replace|g" output.txt
done