0

我有一个 Unix 命令,它输出文件内容,每一行都以各自的文件名为前缀:

C:\lessgov.txt | WHY LESS GOVERNMENT IS BETTER GOVERNMENT
C:\lessgov.txt | A rant...

C:\todos.txt | TODOS
C:\todos.txt | buy bread
C:\todos.txt | shine shoes

我可以使用什么精确的命令来删除竖线(包括竖线)之后的所有内容?(我在想sed,但如果我是对的,我真的不知道如何使用它。)

C:\lessgov.txt
C:\lessgov.txt

C:\todos.txt
C:\todos.txt
C:\todos.txt

我实际上使用的是 Windows,但我可以使用大多数 Unix 命令的端口。

编辑:

这行得通。

cmd> search $dirs | tail -n5 | concat --prefix | grep CPCMS | sed "s/|.*//"

search并且concat是习惯的。

4

3 回答 3

2

我能想到的最冗长、最容易记住的命令是cut

 cut -- cut out selected portions of each line of a file
 [...]
 -d delim
         Use delim as the field delimiter character instead of the tab
         character.

 -f list
         The list specifies fields, separated in the input by the field
         delimiter character (see the -d option.)  Output fields are sepa-
         rated by a single occurrence of the field delimiter character.
 [...]
 -s      Suppress lines with no field delimiter characters.  Unless speci-
         fied, lines with no delimiters are passed through unmodified.

-fN说“选择第 N 个字段”,而-dC说“按字符 C 分割”。

在你的情况下,cat the_file | cut -f1 -d'|'

$ cat the_file 
C:\lessgov.txt | WHY LESS GOVERNMENT IS BETTER GOVERNMENT
C:\lessgov.txt | A rant...

C:\todos.txt | TODOS
C:\todos.txt | buy bread
C:\todos.txt | shine shoes
$ cat the_file | cut -f1 -d'|'
C:\lessgov.txt 
C:\lessgov.txt 

C:\todos.txt 
C:\todos.txt 
C:\todos.txt 

如果您想保留该空白行,请添加-sswitch 并完成。

于 2013-10-10T15:33:52.590 回答
2

您在这里有几个选择,如果您需要在|

 sed 's/ *|.*//' file.txt

保留之前的空间|

 sed 's/|.*//' file.txt
于 2013-10-10T15:12:56.910 回答
1

许多 Unix 工具可以完成这项工作,

假设您的文件/目录名称中没有空格:例如grep

grep -o '^\S\+' file

awk:

awk '{print $1}' file

或者

awk '$0=$1' file

sed, cut .... 也可以。

如果路径中有空格,则处理起来也不难,只需使用 FS/Separator 表达式即可。

于 2013-10-10T15:20:13.097 回答