2015-03-11 5 views
3

У меня есть переменный (с именем $ document_keywords) с текстом следующим содержания в нем:Добавить запятые после каждого слова

Latex document starter CrypoServer 

Я хочу, чтобы добавить запятую после каждого слова, а не после последнего слова. Таким образом, выход будет выглядеть следующим образом:

Latex, document, starter, CrypoServer 

Кто-нибудь поможет мне достичь вышеуказанного выхода.

С уважением, Ankit

+0

Не забудьте сообщить о ваших попытках решить проблему, задав вопрос – Fazlin

ответ

2

Использование BASH строки подстановки:

document_keywords='Latex document starter CrypoServer' 
echo "${document_keywords//[[:blank:]]/,}" 
Latex,document,starter,CrypoServer 

Или sed:

echo "$document_keywords" | sed 's/[[:blank:]]/,/g' 
Latex,document,starter,CrypoServer 

Или tr:

echo "$document_keywords" | tr '[[:blank:]]/' ',' 
Latex,document,starter,CrypoServer 
2

Для этой цели вы можете использовать awk. Loop с использованием for и добавьте , после любого символа, за исключением последнего события (когда i == NF).

$ echo $document_keywords | awk '{for(i=1;i<NF;i++)if(i!=NF){$i=$i","} }1' 
5

Для того, чтобы сохранить пробельные как они даны, я хотел бы использовать СЭД, как это:

echo "$document_keywords" | sed 's/\>/,/g;s/,$//' 

Это работает следующим образом:

s/\>/,/g # replace all ending word boundaries with a comma -- that is, 
      # append a comma to every word 
s/,$//  # then remove the last, unwanted one at the end. 

Тогда:

$ echo 'Latex document starter CrypoServer' | sed 's/\>/,/g;s/,$//' 
Latex, document, starter, CrypoServer 
$ echo 'Latex document starter CrypoServer' | sed 's/\>/,/g;s/,$//' 
Latex, document, starter, CrypoServer 
+0

за вашу помощь. Как пропустить "()" в тексте ниже? перед тем Latex документ стартером Safe (R) CrypoServer после Latex, документ, стартер, Safe (R) CrypoServer –

+0

Вид зависит от того, где именно вы хотите, чтобы пропустить запятые. В этом конкретном случае вы можете использовать 'sed 's/\ ([^ [: space:])] \) \ ([[: space:]] \)/\ 1, \ 2/g'' или, если вы знаете, что нет вкладок или подобных, 'sed 's/\ ([^)] \)/\ 1,/g''. Для общего ответа я должен был бы узнать, какие точные правила создаются и должны обрабатываться. – Wintermute

3

Нормальный sed дал мне ожидаемый результат tput,

sed 's/ /, /g' filename 
Смежные вопросы