私はそれができることを知っています
tr a b < file
。しかし、どうすればいいですかls
?たとえば、ls -l
「ファイル」からファイルのリストを提供する方法です。以下の方法を試しましたが、成功しませんでした。$ cat>test A B C $ ls -l < test
「<<」または本書の目的は明確ではありません。
私のクラスの練習の1つは、viを使用して、「:」を含む行1と「6/3」を含む行2を持つファイルを作成することです。行 1 を区切り文字として使用し、行 2 をフィールドとして使用して、ファイル内の列 2 をカットして表示します。
これらの2行を繰り返し読んで変数として読む必要がありますか?私はそれを使用しますかsed -n '#p' (file)
?エレガントな1ラインソリューションはありますか?
答え1
簡単な方法は次のとおりです。
ls -ld -- $(< file )
(家庭ksh
または互換性のあるシェル)
しかし、ファイル名にスペースやワイルドカードが含まれるなど、いくつかの問題があります。したがって、他の方法を使用することをお勧めします。
xargs -rd '\n' ls -ld -- < file
xargs
(これは-r
これらとオプションのGNU実装を想定しています-d
)。
答え2
ls
標準入力から読み取られないため、入力リダイレクトは何もしません。あなたが望むのはコマンドの置き換えです。ls -l `cat list`
または
ls -l $(cat list)
ここにあるドキュメントは、別のファイルではなくスクリプトに提供された固定文字列に標準入力をリダイレクトする方法についてです。コマンドラインでもこれを行うことができますが、これは価値が限定的で一般的ではありません。
これはまったく論理的ではありません。
答え3
最初の部分への答え:
while
ループを使用してファイルの内容を「ls」コマンドに渡すことができます。while read line ; do ls -l $line done < file
汚れた方法:
counter=1 while read line ; do if [ $counter -eq 1 ] ; then delimiter=$line counter=$((counter+1)) elif [ $counter -eq 2 ] ; then field=$line counter=$((counter+1)) else echo File ended. fi done < inputfile