Мне нужно прочитать в моем скрипте 3 параметра, первые 2 — числа, а третий – файл .txt.

Например:

example.sh 3 2 exam.txt

И с третьим параметром exam.txt, в котором уже есть текст, мне нужно искать строки с head и tail.

Вопрос в том, как мне прочитать это exam.txt? Пробовал "$3", но при работе с ним использует только слово, а не файл.

0
schrodigerscatcuriosity 6 Апр 2021 в 15:46
4
Вы хотите прочитать его содержимое или просто передать путь к файлу другим программам? Кроме того, укажите точные шаги, которые вы уже пробовали, а также то, что вы уже исследовали.
 – 
Panki
6 Апр 2021 в 15:35
Если вы хотите сбросить содержимое жизни, кошка $3 сделает это за вас, однако, в зависимости от того, что вы хотите сделать с содержимым, есть лучшие способы справиться с этим.
 – 
Rob
6 Апр 2021 в 15:42
2
Расскажите, что именно вы делаете "при работе с ним"
 – 
pLumo
6 Апр 2021 в 15:47
Например, мне нужно создать сценарий, который будет выводить строки текста от строки $1 до строки $6, чтобы первый параметр был начальной строкой, а второй параметр — конечной строкой вывода. И третьим параметром будет текст по моему выбору. И из этого случайного текста нужно вывести эти строки. Текст, конечно, представляет собой какой-то файл с окончанием .txt.
 – 
Zijad Bećirević
6 Апр 2021 в 15:58
Каждая команда, которую вы можете использовать для обработки файла, будет принимать одно или несколько имен файлов в командной строке либо в качестве аргумента, либо через перенаправление.
 – 
Paul_Pedant
6 Апр 2021 в 16:14

1 ответ

Лучший ответ

$3 будет просто строкой имени файла, которую вы передаете сценарию bash. Вам нужно будет что-то сделать с этой строкой имени файла, чтобы извлечь из нее что-то полезное.

Если вам просто нужно получить содержимое самого файла, вы можете cat $3, и это будет содержать содержимое имени файла, которое вы передали в качестве этого аргумента.

Если вам нужно перебрать каждую строку файла, вы можете сделать что-то вроде этого:

while IFS= read -r line; do
  echo "$line"  # $line is a variable that represents the current line in the file
done < "$3"

В приведенном выше примере будет просто отображаться каждая строка в файле, поэтому вам нужно добавить счетчик/логику в цикл while, который позволит вам выполнять все, что вы хотите сделать в определенных строках, и заменить оператор эха.

1
Natolio 6 Апр 2021 в 16:36
1
Это хорошее чтение, спасибо за публикацию. В основном я пытался сделать это как можно проще, но, вероятно, лучше не отправлять людей по плохому пути, если они только начинают, несмотря на то, что это проще. Спасибо!
 – 
Natolio
6 Апр 2021 в 16:23
1
sed, grep, awk - обычные подозреваемые для обработки текстовых файлов :)
 – 
schrodigerscatcuriosity
6 Апр 2021 в 16:29
1
По крайней мере, while IFS= read -r line; do, чтобы вы не разбивали слова на пробелы, а затем не заключали переменные в двойные кавычки при их использовании, поэтому echo "$line" и done <"$3"
 – 
roaima
6 Апр 2021 в 16:31
Я отредактирую ответ, чтобы включить это.
 – 
Natolio
6 Апр 2021 в 16:35