Как удалить только предыдущий пробел в текстовом файле?

У меня есть текстовый файл с пробелом перед строкой. Как мне удалить его, используя tr (или правильную команду)?

Например, у меня есть это:

 Text

Мне бы хотелось:

Text   

Но как мне это сделать для 200-строчного текстового файла?

У меня есть этот конвейер:

cat file.txt | tr -s " " | tr -d "," 

Другие команды tr предназначены для удаления других аспектов текстовые файлы.

2
задан 4 February 2017 в 22:11

3 ответа

Это должно сделать работу:

sed -e 's/^ //' -e 's/,//g' file.txt

Команде sed (потоковый редактор) передаются две команды для последовательного выполнения, обе команды ничем не заменяют, то есть удаляют часть ввода.

Первый удаляет пробелы сразу после начала строки, отмечает ^, второй удаляет запятые и имеет тот же эффект, что и ваша команда tr -d ",".

Спасибо minerz029 за косвенное напоминание, что я пропустил «g», так как мой первый ответ удалял только первую запятую, найденную в каждой строке.

0
ответ дан 4 February 2017 в 22:11
sed -e 's/^ //g' -e 's/,//g' file.txt

Объяснение:

Первый скрипт (s/^ //g) должен заменить все начальные пробелы ничем (удалить).
Второй сценарий (s/,//g) должен заменить все запятые ничем (удалить).

0
ответ дан 4 February 2017 в 22:11

Bash имеет способ использовать структуру while IFS= read -r ; do . . . done < input.txt для печати точного содержимого файла, но одна из особенностей здесь заключается в том, что если вы опустите IFS=, начальные пробелы не будут читаться. Таким образом, мы можем сделать следующее:

$ cat input.txt
 Text
$ while read -r line; do printf "%s\n" "$line"; done < input.txt                                                         
Text

И чтобы заменить текст исходного файла, можно немного изменить команду следующим образом:

$ cat input.txt
 Text
$ while read -r line; do printf "%s\n" "$line"; done < input.txt > temp.txt ; mv temp.txt input.txt                      
$ cat input.txt
Text

Мы также можем использовать параметр расширение для удаления запятых

$ cat input.txt                                                                                                          
 Text, text,
$ while read -r line; do printf "%s\n" "${line//,}"; done < input.txt                                                    
Text text

tr -s" " также может быть смоделировано путем незначительного изменения printf

$ cat input.txt                                                                                                          
 Text,     text,
$ while read -r line; do printf "%s " ${line//,};printf "\n"; done < input.txt                                           
Text text 
0
ответ дан 4 February 2017 в 22:11

Другие вопросы по тегам:

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