4

次の構造を持つファイルfile.txtがあります:-

./a/b/c/sdsd.c
./sdf/sdf/wer/saf/poi.c
./asd/wer/asdf/kljl.c
./wer/asdfo/wer/asf/asdf/hj.c

パスから c ファイル名のみを取得するにはどうすればよいですか。つまり、私の出力は

sdsd.c
poi.c
kljl.c
hj.c
4

5 に答える 5

4

これは、awk を使用して簡単に実行できます。

set field seperator FS="/" と $NF は、すべてのレコードの最後のフィールドを出力します。

awk 'BEGIN{FS="/"} {print $NF}' file.txt

また

awk -F/ '{print $NF}' file.txt

または、次のように cut と unix コマンド rev で行うことができます

rev file.txt | cut -d '/' -f1 | rev

于 2012-11-20T10:33:17.703 に答える
4

basename次のコマンドを使用できます。

basename /a/b/c/sdsd.c

sdsd.c を提供します

のファイルのリストについてはfile.txt、次のようにします。

while IFS= read -r line; do basename "$line"; done < file.txt
于 2012-11-20T10:33:20.070 に答える
1

使用sed

$ sed 's|.*/||g' file
sdsd.c
poi.c
kljl.c
hj.c
于 2012-11-20T10:37:13.607 に答える
1

最も単純なもの ($NF現在の行の最後の列です):

awk -F/ '{print $NF}' file.txt

またはパラメータ展開を使用:

while read file; do echo "${file##*/}"; done < file.txt

またはbashbasename

while read file; do basename "$file"; done < file.txt

出力

sdsd.c
poi.c
kljl.c
hj.c
于 2012-11-20T10:31:59.610 に答える
1

Perl ソリューション:

perl -F/ -ane 'print $F[@F-1]' your_file

また、sedを使用できます:

sed 's/.*[/]//g' your_file
于 2012-11-20T10:34:43.007 に答える