Во-первых, вы никогда не напишите это (см. https://mywiki.wooledge.org/ParsingLs, http://porkmail.org/era/unix/award.html и вам не нужны greps + seds + pipe при использовании awk):
ls /SomeFolder | grep $1 | xargs cat | grep something | grep .txt | awk '{print $2}' | sed 's/;$//'`
вы бы написали это вместо:
find /SomeFolder -mindepth 1 -maxdepth 1 -type f -name "*$1*" -exec \
awk '/something/ && /.txt/{sub(/;$/,"",$2); print $2}' {} +
или если вы предпочитаете использовать print | xargs
вместо -exec
:
find /SomeFolder -mindepth 1 -maxdepth 1 -type f -name "*$1*" -print0 |
xargs -0 awk '/something/ && /.txt/{sub(/;$/,"",$2); print $2}'
и теперь добавить этот скрипт в файл будет:
cat <<'EOF' >> script2.sh
find /SomeFolder -mindepth 1 -maxdepth 1 -type f -name "*$1*" -print0 |
xargs -0 awk '/something/ && /.txt/{sub(/;$/,"",$2); print $2}'
EOF
Кстати, если вы хотите, чтобы .
в .txt
трактовался буквально, а не как мета-выражение regexp, означающее «любой символ», тогда вы должны использовать \.txt
вместо .txt
.