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 

その空白行を残したい場合は、-sスイッチを追加すれば完了です。

于 2013-10-10T15:33:52.590 に答える
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 に答える