Начальные вопросы относительно «<», «<<» и чтения файлов

  1. Я знаю, что могу сделать tr ab < file , но как это сделать для ls ? Так, например, как подать ls -l список файлов из «файла». Я попробовал ниже, и он не работал.

     $ cat>test A B C $ ls -l < test 
  2. Я не понимаю, для чего используется «<<» или здесь используется документ.

  3. Одним из моих упражнений класса является использование vi для создания файла с «:» в строке 1 и «6/3» в строке 2. Используя строку 1 в качестве разделителя и строку 2 в качестве поля, вырезайте и отобразите столбец2 из файла ,

Должен ли я зацикливаться и читать 2 строки в переменную? Использую ли я sed -n '#p' (file) ? Есть ли элегантное 1-строчное решение?

  • cut: опция требует аргумента - 'f'
  • вырезать определенные поля из текстового файла
  • Linux вырезает команду с -f1
  • Вырезать одну строку на две
  • отрезать команду, заказ не сохранился?
  • Как удалить второй столбец .txt-файла?
  • Разрезает ли вырезать любые поля, если разделитель не существует
  • Можете ли вы указать корпус для вырезания?
  • 3 Solutions collect form web for “Начальные вопросы относительно «<», «<<» и чтения файлов”

    Простой подход:

     ls $(< file ) 

    но у него есть некоторые проблемы, например, с пробелами в именах файлов. Поэтому лучше использовать другой подход:

     xargs -d$'\n' ls < file 
    1. ls не читается со стандартного ввода, поэтому перенаправление ввода ничего не делает. Вы хотите заменить команду.

       ls -l `cat list` 

      или

       ls -l $(cat list) 
    2. Здесь документы используются для перенаправления стандартного ввода на фиксированные строки, предоставленные в скрипте вместо отдельного файла. Вы также можете сделать это из командной строки, но это имеет ограниченное значение и не является общим.

    3. Это не имеет смысла.

    Ответ первой части:

    1. вы можете использовать цикл while для передачи содержимого файла в «ls» commnad.

       while read line ; do ls -l $line done < file 
    2. грязный способ сделать это:

       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 
    Linux и Unix - лучшая ОС в мире.