Вот мой вывод команды:
# ls -la | grep -i text | awk '{print $9}'
text1.txt
text2.txt
text3.txt
text4.txt
Я хотел напечатать выходное значение как:
text1.txt:text2.txt:text3.txt:text4.txt
Вот мой вывод команды:
# ls -la | grep -i text | awk '{print $9}'
text1.txt
text2.txt
text3.txt
text4.txt
Я хотел напечатать выходное значение как:
text1.txt:text2.txt:text3.txt:text4.txt
Боже мой, не ls
. Ты хочешь
( files=(*text*); IFS=:; echo "${files[*]}" )
Я использую подоболочку, поэтому переменная IFS в вашей текущей оболочке не затронута.
Если вы уверены, что ваши имена файлов не содержат символов новой строки, вы можете сделать
ls -1 *text* | paste -sd:
Вы можете добавить что-то в скрипт bash:
unset list
for file in `ls -a | grep -i 'text'`; do list=$list"$file:"; done
echo ${list::-1}
Первоначальный unset
должен удалить предыдущие значения, если вы запускаете команду несколько раз. Чтобы избавиться от последнего двоеточия (:), вы можете сделать это во время echo
если вы используете bash 4.2
или выше, как я сделал в своем коде.
пожалуйста попробуйте это, оно должно работать
$ ls -la | grep -i text | awk '{printf ": %s", $9}'
Не точное решение и нуждаются в каких-либо улучшениях.
Просто направьте вывод в tr
$ ls -la | grep -i text | awk '{print $9}' | tr '\n' ':'
text1:text2:text4:text5:
Я не мог удалить последнее :
в конце, а также не смог добраться до следующей строки.
Привет Мохаммед Альзатари Анс помог мне решить эту проблему.
$ ls -la | grep -i text | awk '{printf ":%s", $9}'|awk '{print substr($1,2);}'
text1.txt:text2.txt:text3.txt:text4.txt
Задача решена