2015-03-27 3 views
1

Я хочу заменить все запятые в моем файле пробелом, двоеточием и пробелом. Я продолжаю получать ошибку «Только одна строка может быть указана при удалении без повторения повторения». Вот моя команда, где я ошибаюсь?Bash заменить запятую пробелом пространства пробела

tr -d "," " : " < testfile 

ответ

4

tr -d обычно используется для удаления символов. Если вы хотите быстро заменить запятые с space-colon-space последовательности , просто используйте:

sed 's/,/ : /g' testfile 

После того, как вы счастливы с выходом вы можете использоваться sed -i заменить исходный файл, если это то, что вы хочу:

sed -i.bak 's/,/ : /g' testfile 

Это будет изменить файл, оставив первоначальное содержание в testfile.bak. Если ваш sed не достаточно развито, чтобы иметь возможность -i, вы можете сделать это вручную:

mv testfile testfile.bak 
sed 's/,/ : /g' testfile.bak >testfile 

Если вы просто пытаетесь заменить запятые двоеточие (с не окружающими пространства), вы можете использовать tr:

tr ',' ':' <testfile 

или с использованием тех же -i -emulation за менее развитой sed реализации, если вы хотите изменить исходный файл:

mv testfile testfile.bak 
tr ',' ':' <testfile.bak >testfile 
0

Если я расшифровывать то, что вы ищете правильно, sed, вероятно, лучший инструмент для этого. tr выполняет замену, но только для отдельных символов. Если несколько символов приведены он ожидает от них быть списком находки и замен, например .:

$ echo "hi"| tr "ih" "on" 
no 

Он заменяет я с о и ч с п, чтобы сделать привет в нет.

Вы также используете переключатель -d, который предназначен для удаления символов.

Чтобы использовать СЕПГ, хотя, вы хотите что-то вроде этого:

sed 's/,/ : /g' input > output 

В зависимости от версии используемого sed вы можете быть в состоянии использовать переключатель -i действовать на файл на месте и избежать перенаправление и новый файл.

sed - редактор потока, который читается строками, поэтому это будет идти по строке через файл и заменять каждую запятую двоеточием, окруженным интервалом.

sed является очень мощным, и вы должны прочитать об этом, если вы хотите использовать его больше, но простой синтаксис, используемый здесь 's/regex/replacement/g' с g в конце означает глобальный, или заменить все.

0

просто вытащите -d, и ваша команда работает.Вы, вероятно, просто хотите взять пробелы вокруг вашей кишки. Это займет последовательности обоих наборов и заменит их. поэтому вы заменяете свою запятую пространством с тем, что у вас есть.

Смежные вопросы