Вот мой вывод команды:

# ls -la | grep -i text | awk '{print $9}' 
text1.txt
text2.txt
text3.txt
text4.txt

Я хотел напечатать выходное значение как:

text1.txt:text2.txt:text3.txt:text4.txt

5 ответов5

2

Боже мой, не ls. Ты хочешь

( files=(*text*); IFS=:; echo "${files[*]}" )

Я использую подоболочку, поэтому переменная IFS в вашей текущей оболочке не затронута.

Если вы уверены, что ваши имена файлов не содержат символов новой строки, вы можете сделать

ls -1 *text* | paste -sd:
1

Вы можете добавить что-то в скрипт bash:

unset list
for file in `ls -a | grep -i 'text'`; do list=$list"$file:"; done
echo ${list::-1}

Первоначальный unset должен удалить предыдущие значения, если вы запускаете команду несколько раз. Чтобы избавиться от последнего двоеточия (:), вы можете сделать это во время echo если вы используете bash 4.2 или выше, как я сделал в своем коде.

1

пожалуйста попробуйте это, оно должно работать

$ ls -la | grep -i text | awk '{printf ": %s", $9}'
0

Не точное решение и нуждаются в каких-либо улучшениях.

Просто направьте вывод в tr

$ ls -la | grep -i text | awk '{print $9}' | tr '\n' ':'

text1:text2:text4:text5:

Я не мог удалить последнее : в конце, а также не смог добраться до следующей строки.

0

Привет Мохаммед Альзатари Анс помог мне решить эту проблему.

$ ls -la | grep -i text | awk '{printf ":%s", $9}'|awk '{print substr($1,2);}'

text1.txt:text2.txt:text3.txt:text4.txt

Задача решена

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .