2017-05-10 19 views
0

lsコマンドの出力を変更しています。私が望むすべてのコードを長めに実行しましたが、多くの点で改善が期待できるので、あなたの意見を求めています。私は各コマンドについて説明しますので、私はそれで何をしたいのか分かります。lsコマンドの出力を変更する

ls -l | 
sed 's/total/           C FILES.c/' | 
cut -b 45-100 | 
grep -e "\.c" | 
sed 's/C FILES.C/\nC FILES\n/' | 
sed 's/[0-9]//' | 
sed 's/[0-9]//' | 
sed 's/[0-9]//' 

Result

  1. ls -lディスプレイ "トータル:" +番号、し、行ごとに1つのファイルを表示します。ここ

    はコードの私の長蛇の列です。

  2. sed 's/total/' C FILES.c/この長い部分は、 "total"行をタイトルに置き換え、次のコマンドで見られるように、この方法で字下げしなければならなかったので、名前と同じ行にありますls -rで表示されるファイルの後者のコマンドでは、数字が世話をします。

  3. cut -b 45-100は、ファイル名の前にあるすべてのものを削除します。最後のコマンドに "C FILES.C"の前に45桁のスペースを入れると、それはカットされ、次の55文字しか表示されません。 (55は、私が使用するファイル名を含むのに十分な大きさです)。

  4. grep -e "\.c"は、.cで終わらないファイルを削除します。 Cファイルというタイトルはcファイルではないので、grepコマンドを使用しても消えないように、接尾辞.cを付けて書かなければなりませんでした。

  5. sed 's/C FILES.C/\nC FILES\n/'は、.c接尾辞を削除し、改行文字を追加して、コマンドライン、タイトル、およびファイルのリストを区切ります。

  6. 2番目のコマンドは、「合計」を「Cファイル」のタイトルに置き換えました。しかし、それは "合計"に続く数字に取って代わるものではなかったので、この数字はまだここにあり、私はそれを取り除きたい。コマンドは削除する必要のある番号を知らないので、1,45、または666でもかまいません。私はコマンドsed 's/[0-9]//を3回使って0〜9の3倍の数字を削除しました。何もしません)。数字の長さが3より大きい場合、数字は残っていますが、999以上の合計を持つとは思わないので、このコマンドを3回繰り返すだけで十分です。私は's/[0-9][0-9][0-9]//を試しましたが、数字の長さが少なくとも3である場合にのみ動作します。それ以外の場合は何もしません。

これは私ができる最高の方法です。私はオプションなしでlsコマンドを使用しようとしましたが、それ以降はうまく動作せず、置き換える行がないのでタイトルを出力する方法がわかりませんでした。

どのように読んでいいか分かりやすくするためのアイデアやアドバイスをお待ちしています。

+0

'find'コマンドを使ってみましたか? – Inian

+2

lsの出力と期待される出力を解析した後に – tso

+2

良い読み込み - 'ls'の出力を解析しない理由[ParsingLs](http://mywiki.wooledge.org/ParsingLs) – Inian

答えて

1

あなたの正確な予想される出力(それを提供してください)、私の気持ちはあなたがすべてのことに置き換えることができることです知らず:私にとって

echo C FILES; ls -1 *.c 

を与えること:

C FILES 
foo.c 
norm.c 
readfile.c 
size.c 
thr.c 

をこれが出力されますあなたが探しています?そうでない場合は、何ですか?

+0

それは私のコードが持つことができるいくつかの小さなバグを除いて、私が欲しいものです(私は2つあります)。私は、 'echo C FILES;'を 'echo" \ nCファイル\ n "'に置き換えて改行を取得しました。これは完璧です。このlsオプションについて知らなかった、私は男の中でそれを見つけられなかった。 – nounoursnoir

+2

なぜ 'printf '%s \ n' * .c'ですか? –

+0

これも素晴らしいです! – nounoursnoir

0

私はあなたがやっているように見えるように感じますが、私の言う限りでは、単に "C Files"というタイトルのcファイルをリストしたいのですか?

ls *.c | cat <(echo "C Files") - 

この第二の変形例:あなたがより多くの「パイプ」-able形式でそれをしたい場合の

echo "C Files" && ls *.c 

:私は右そしてちょうどこのような何かをしない理由だ場合

ls *.c | cat <(echo "C Files") - > output.txt 

同じ出力を取得してコマンドを並べ替えるには、次のように入力します。 put:

+0

'ls'をオプションなしで使用すると1行にファイルがリストされ、各ファイルが新しい行になるようにします。 – nounoursnoir

+0

出力をパイプするとすぐに、ファイルを1行に1つずつ表示します。 DebianとUbuntuでテストされています。スペースを追加するには、次のように拡張します。 ls * .c | cat <(echo "") - | cat <(echo "C Files") - | cat <(echo "") - – L33tCh

+0

はい、それはいいですね!私はまだ最初の位置にタイトルを表示するコマンドを持っているのが好きです – nounoursnoir