![解析并删除分隔符之间的字符串部分](https://linux22.com/image/1310395/%E8%A7%A3%E6%9E%90%E5%B9%B6%E5%88%A0%E9%99%A4%E5%88%86%E9%9A%94%E7%AC%A6%E4%B9%8B%E9%97%B4%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%83%A8%E5%88%86.png)
我想浏览一个文件并删除分隔符之间的某些序列。
例如
drw---- 00000000 11111111 0 ./a/
drw---- 00000000 11111111 0 ./b/
d------ 00000000 11111111 0 ./c/
d------ 00000000 11111111 0 ./d/k/
d------ 00000000 11111111 0 ./e/l/r/
d------ 00000000 11111111 0 ./f/m/s/x/
------- 00000000 11111111 89 ./g/n/t/y/C.xml
dr----- 00000000 11111111 0 ./h/o/u/z/
dr-r--- 00000000 11111111 0 ./i/p/v/A/D/
d--r--- 00000000 11111111 0 ./j/q/w/B/
会成为
drw---- ./a/
drw---- ./b/
d------ ./c/
d------ ./d/k/
d------ ./e/l/r/
d------ ./f/m/s/x/
------- ./g/n/t/y/C.xml
dr----- ./h/o/u/z/
dr-r--- ./i/p/v/A/D/
d--r--- ./j/q/w/B/
其中起始分隔符是文件中的第二个空格,结束分隔符是 ./
我对 cygwin 及其所有智能工具都还很陌生,所以我不知道该怎么做。我很确定我可以以某种方式使用 sed 和正则表达式,但我只是不太了解,无法自己想出解决方案。
答案1
最简单的方法是使用awk
。
$ awk '{print $1, $5}' myfile.txt
awk
逐行读取文件,设置一些特殊变量并对每一行运行命令。当使用空格作为分隔符对一行进行标记时,这里包含第一个和第五个字符串$1
。$5
答案2
这是您想要的正则表达式。在 vim 中打开文件并运行它,或者执行sed the_expression oldname > newname
。
:%s/[0-9][0-9]*//g
说明:
% 符号指定应在整个文件上运行以下命令。
s
意味着search/for this expression/and replace it with this one/
在您的情况下,您想要删除所有数字,因此我们指示 vim 的正则表达式引擎搜索一个或多个数字的每次出现并将其替换为零。
答案3
“其中起始分隔符是文件中的第二个空格,结束分隔符是 ./”
这是专为你准备的丑陋
C:\sdf>type p.p
drw---- 00000000 11111111 0 ./a/
drw---- 00000000 11111111 0 ./b/
d------ 00000000 11111111 0 ./c/
d------ 00000000 11111111 0 ./d/k/
d------ 00000000 11111111 0 ./e/l/r/
d------ 00000000 11111111 0 ./f/m/s/x/
------- 00000000 11111111 89 ./g/n/t/y/C.xml
dr----- 00000000 11111111 0 ./h/o/u/z/
dr-r--- 00000000 11111111 0 ./i/p/v/A/D/
d--r--- 00000000 11111111 0 ./j/q/w/B/
C:\sdf>sed -r "s/(\s+\S+\s*)([^.]*\.\/)/\1.\//" p.p
drw---- ./a/
drw---- ./b/
d------ ./c/
d------ ./d/k/
d------ ./e/l/r/
d------ ./f/m/s/x/
------- ./g/n/t/y/C.xml
dr----- ./h/o/u/z/
dr-r--- ./i/p/v/A/D/
d--r--- ./j/q/w/B/
C:\sdf>