вставьте запятую после последней буквы

Bash не имеют никакой функции для расширения всего одного соответствия из многих.

образец (нечто) соответствия всего одно возникновение из образца нечто . Таким образом, это соответствует нечто , но не foofoo. Эта синтаксическая форма полезна для сборки или узоров как (foo|bar) , который соответствует или нечто или панель . Это может использоваться в качестве части более длинных узоров как (foo|bar) -*.txt , который соответствует foo-hello.txt , foo-42.txt , bar-42.txt , и т.д.

, Если вы хотите использовать одно соответствие среди многих, можно поместить соответствия в массив и затем использовать элемент массива.

kernels=(vmlinuz*)
ls -l "${kernels[0]}"

Соответствия всегда сортируются в лексикографическом порядке, таким образом, это распечатает первое соответствие в лексикографическом порядке.

Примечание, что, если образец не соответствует никакому файлу, вы получите массив, содержащий единственный элемент, который является неизменным образцом:

$ a=(doesnotmatchanything*)
$ ls -l "${a[0]}"
ls: cannot access doesnotmatchanything*: No such file or directory

Набор опция nullglob получить пустой массив вместо этого.

shopt -s nullglob
kernels=(vmlinuz*)
if ((${#kernels[@]} == 0)); then
  echo "No kernels here"
else
  echo "One of the ${#kernels[@]} kernels is ${kernels[0]}"
fi

Zsh имеет удобные функции здесь. спецификатор шарика [ ЦИФРА ] причины образец для расширения только до соответствия NUMth; вариант [ NUM1, NUM2] расширяется до NUM1th через соответствия NUM2th (запускающийся в 1).

% ls -l vmlinuz*([1])
lrwxrwxrwx 1 root root 26 Nov 15 21:12 vmlinuz -> vmlinuz-3.16-0.bpo.3-amd64
% ls -l nosuchfilehere*([1])
zsh: no matches found: nosuchfilehere*([1])

Спецификатор шарика N заставляет образец расширяться до пустого списка, если никакой файл не подобран.

kernels=(vmlinuz*(N))
if ((#kernels)); then
  ls -l $kernels
else
  echo "No kernels here"
fi

спецификатор шарика ом соответствия видов путем увеличения возраста вместо по имени ( m в течение времени изменения); Ом виды путем уменьшения возраста. Так vmlinuz* (ом [1]) расширяется до нового файла ядра.

0
10.11.2014, 20:38
1 ответ

Это заменит последовательности из 2 или более пробелов командой и те же пробелы меньше одного:

sed 's/ \( \+\)/,\1/g' file.txt

Это не сработает, если между столбцами будет только один пробел.


Если вы хотите только ", " в качестве разделителя полей:

sed 's/ \{2,\}/, /g' file
2
28.01.2020, 02:36

Теги

Похожие вопросы