Добавить строку в текстовый файл с терминала

Вы можете попробовать запустить ubuntu без его установки и разделить так, как вам нравится, с lvm. Затем запустите установщик и выберите для него тома lvm. Но вам следует знать, что установка lvm на ubutu 18.04 может значительно замедлить время загрузки. Вы не должны разделять usr и корневой раздел на управляемые системой os.

6
задан 3 November 2010 в 01:34

45 ответов

find и sed являются вашим оружием выбора:

find /mydat/ -exec sed '1i 50' {} \;

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

] Альтернативно, если вам не нужны рекурсии или сложные селекторы для find, вы можете полностью удалить find:

sed '1i 50' *
7
ответ дан 26 May 2018 в 00:39
  • 1
    & GT; Благодарю. Однако остается небольшая проблема (см. Примерные вопросы для примера). – user2413 2 November 2010 в 23:09
  • 2
    Исправлена. Я также добавил упрощенную версию, которая все равно должна делать то, что вам нужно. find более мощный, но вам может и не понадобиться. Я добавлю, что обе версии несколько проще, чем все эти запутанные петли bash. – Oli♦ 2 November 2010 в 23:22
  • 3
    Одна последняя вещь. У меня есть файл timing.txt и мне нужно заменить первую строку этого файла постоянной строкой «49». Как вы изменяете свою команду? – user2413 3 November 2010 в 00:07
  • 4
    ok found: sed '1d' timing0.txt & gt; timing0.txt – user2413 3 November 2010 в 00:29

find и sed являются вашим оружием выбора:

find /mydat/ -exec sed '1i 50' {} \;

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

] Альтернативно, если вам не нужны рекурсии или сложные селекторы для find, вы можете полностью удалить find:

sed '1i 50' *
7
ответ дан 25 July 2018 в 22:57

find и sed являются вашим оружием выбора:

find /mydat/ -exec sed '1i 50' {} \;

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

] Альтернативно, если вам не нужны рекурсии или сложные селекторы для find, вы можете полностью удалить find:

sed '1i 50' *
7
ответ дан 27 July 2018 в 01:41

find и sed являются вашим оружием выбора:

find /mydat/ -exec sed '1i 50' {} \;

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

] Альтернативно, если вам не нужны рекурсии или сложные селекторы для find, вы можете полностью удалить find:

sed '1i 50' *
7
ответ дан 31 July 2018 в 12:18

find и sed являются вашим оружием выбора:

find /mydat/ -exec sed '1i 50' {} \;

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

] Альтернативно, если вам не нужны рекурсии или сложные селекторы для find, вы можете полностью удалить find:

sed '1i 50' *
7
ответ дан 2 August 2018 в 04:20

find и sed - ваше оружие выбора:

  find / mydat / -exec sed '1i 50' {} \  ;   

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

Альтернативно, если вам не нужна рекурсия или сложные селекторы для находят , вы можете полностью удалить find :

  sed '1i 50' *  
7
ответ дан 6 August 2018 в 04:25

find и sed - ваше оружие выбора:

  find / mydat / -exec sed '1i 50' {} \  ;   

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

Альтернативно, если вам не нужна рекурсия или сложные селекторы для находят , вы можете полностью удалить find :

  sed '1i 50' *  
7
ответ дан 7 August 2018 в 22:31

find и sed - ваше оружие выбора:

  find / mydat / -exec sed '1i 50' {} \  ;   

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

Альтернативно, если вам не нужна рекурсия или сложные селекторы для находят , вы можете полностью удалить find :

  sed '1i 50' *  
7
ответ дан 10 August 2018 в 10:39

find и sed - ваше оружие выбора:

  find / mydat / -exec sed '1i 50' {} \  ;   

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

Альтернативно, если вам не нужна рекурсия или сложные селекторы для находят , вы можете полностью удалить find :

  sed '1i 50' *  
7
ответ дан 13 August 2018 в 17:12
  • 1
    & GT; Благодарю. Однако остается небольшая проблема (см. Примерные вопросы для примера). – user2413 2 November 2010 в 23:09
  • 2
    Исправлена. Я также добавил упрощенную версию, которая все равно должна делать то, что вам нужно. find более мощный, но вам может и не понадобиться. Я добавлю, что обе версии несколько проще, чем все эти запутанные петли bash. – Oli♦ 2 November 2010 в 23:22
  • 3
    Одна последняя вещь. У меня есть файл timing.txt и мне нужно заменить первую строку этого файла постоянной строкой «49». Как вы изменяете свою команду? – user2413 3 November 2010 в 00:07
  • 4
    ok found: sed '1d' timing0.txt & gt; timing0.txt – user2413 3 November 2010 в 00:29

Чтобы отредактировать файл, вам нужен редактор. ed и ex - примеры командных редакторов, которые полезны для редактирования файлов из сценария. Вот пример, вставляющий строку в каждый файл с расширением .txt в / mydata, с помощью ed:

#!/bin/bash
for file in /mydata/*.txt; do
    printf '%s\n' 0a 50 . w | ed -s "$file"
done

Это будет обрабатывать все виды нечетных символов в именах файлов тоже, в отличие от всех примеров, использующих [ f4] -loops с ls в ответах, данных до сих пор.

Вот ссылка, описывающая, как использовать ed: http://bash-hackers.org/wiki/doku.php?id=howto : edit-ed

Для того, чтобы справиться с bash, я настоятельно рекомендую прочитать http://bash-hackers.org/wiki/doku.php?id=howto:edit-ed

3
ответ дан 26 May 2018 в 00:39

По существу вам нужно перебирать каждый текстовый файл в каталоге, а затем добавлять в начало маленькую строку. Это не сложно, если вы разделите его на два шага.

Чтобы добавить строку в начало файла, формат будет таким:

echo "50 $( cat file.txt )" > file.txt

Если вы получаете cannot overwrite existing file, вам нужно отключить noclobber

set +o noclobber

Теперь вам просто нужно отбросить это в цикле, который прокручивает файлы, которые вы хотите изменить.

for FILE in $( ls /mydata/ | grep txt$ ) ; do
  echo "${FILE}"
done

Если это выведет все файлы, которые вы хотите правильно изменить, добавьте команду для изменения файлов (как показано ниже). Если нет, измените инструкцию grep до тех пор, пока она не будет соответствовать тому, что вам нужно.

for FILE in $( ls /mydata/ | grep txt$ ) ; do
  echo "50 $( cat ${FILE} )" > "${FILE}"
done

И если вы хотите, чтобы это было сделано в одной строке:

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}"; done

Edit

Если вы хотите, чтобы 50 в своей собственной строке, используйте printf вместе с \n вместо эха, как показано ниже.

for FILE in $( ls /mydata/ | grep txt$ ) ; do printf "50\n$( cat ${FILE} )" > "${FILE}"; done
2
ответ дан 26 May 2018 в 00:39

С тех пор как вы спросили, commandlinefu.com перечисляет кучу команд и трюков для использования в оболочке, и в нем много материала об обработке текстовых файлов.

2
ответ дан 26 May 2018 в 00:39

Сложно добавить текст в конец файлов. Для BASH: echo 50 >> file.txt добавит 50 в конец файла file.txt. Оберните это в цикле for так: for $FILE in 'ls' do echo 50 >> $FILE; done; for $FILE in * do echo 50 >> $FILE; done; будет перебирать все файлы в текущем каталоге, добавляя 50 до конца. Обратите внимание, что одиночные кавычки на самом деле `, но это индикатор для разметки кода здесь ... blech. Чтобы добавить его в начало каждого файла, создайте в него временный файл и эхо 50, а затем повторите его содержимое. Затем переименуйте файл, чтобы перезаписать оригинал.

#!/bin/bash

echo "Adding 50 to each file in current directory."

for $FILE in *
do
[[ -f "$i" ]] || continue
echo "50" >> tmp
cat "$FILE" >> tmp
mv tmp "$FILE"
done

Это должно сработать, но запустите его в тестовом каталоге перед чем-то важным.

Edit: Обновлен скрипт как в комментарии Махеша

1
ответ дан 26 May 2018 в 00:39

С тех пор как вы спросили, commandlinefu.com перечисляет кучу команд и трюков для использования в оболочке, и в нем много материала об обработке текстовых файлов.

2
ответ дан 25 July 2018 в 22:57

Чтобы отредактировать файл, вам нужен редактор. ed и ex - примеры командных редакторов, которые полезны для редактирования файлов из сценария. Вот пример, вставляющий строку в каждый файл с расширением .txt в / mydata, с помощью ed:

#!/bin/bash for file in /mydata/*.txt; do printf '%s\n' 0a 50 . w | ed -s "$file" done

Это будет обрабатывать все виды нечетных символов в именах файлов тоже, в отличие от всех примеров, использующих for -loops с ls в ответах, данных до сих пор.

Вот ссылка, описывающая, как использовать ed: http://bash-hackers.org/wiki/doku.php?id=howto : edit-ed

Для того, чтобы справиться с bash, я настоятельно рекомендую прочитать http://bash-hackers.org/wiki/doku.php?id=howto:edit-ed

3
ответ дан 25 July 2018 в 22:57

Сложно добавить текст в конец файлов. Для BASH: echo 50 >> file.txt добавит 50 в конец файла file.txt. Оберните это в цикле for так: for $FILE in 'ls' do echo 50 >> $FILE; done; for $FILE in * do echo 50 >> $FILE; done; будет перебирать все файлы в текущем каталоге, добавляя 50 до конца. Обратите внимание, что одиночные кавычки на самом деле `, но это индикатор для разметки кода здесь ... blech. Чтобы добавить его в начало каждого файла, создайте в него временный файл и эхо 50, а затем повторите его содержимое. Затем переименуйте файл, чтобы перезаписать оригинал.

#!/bin/bash echo "Adding 50 to each file in current directory." for $FILE in * do [[ -f "$i" ]] || continue echo "50" >> tmp cat "$FILE" >> tmp mv tmp "$FILE" done

Это должно сработать, но запустите его в тестовом каталоге перед чем-то важным.

Edit: Обновлен скрипт как в комментарии Махеша

1
ответ дан 25 July 2018 в 22:57

По существу вам нужно перебирать каждый текстовый файл в каталоге, а затем добавлять в начало маленькую строку. Это не сложно, если вы разделите его на два шага.

Чтобы добавить строку в начало файла, формат будет таким:

echo "50 $( cat file.txt )" > file.txt

Если вы получаете cannot overwrite existing file, вам нужно отключить noclobber

set +o noclobber

Теперь вам просто нужно отбросить это в цикле, который прокручивает файлы, которые вы хотите изменить.

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "${FILE}" done

Если это выведет все файлы, которые вы хотите правильно изменить, добавьте команду для изменения файлов (как показано ниже). Если нет, измените инструкцию grep до тех пор, пока она не будет соответствовать тому, что вам нужно.

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}" done

И если вы хотите, чтобы это было сделано в одной строке:

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}"; done

Edit

Если вы хотите, чтобы 50 в своей собственной строке, используйте printf вместе с \n вместо эха, как показано ниже.

for FILE in $( ls /mydata/ | grep txt$ ) ; do printf "50\n$( cat ${FILE} )" > "${FILE}"; done
2
ответ дан 25 July 2018 в 22:57

С тех пор как вы спросили, commandlinefu.com перечисляет кучу команд и трюков для использования в оболочке, и в нем много материала об обработке текстовых файлов.

2
ответ дан 27 July 2018 в 01:41

Чтобы отредактировать файл, вам нужен редактор. ed и ex - примеры командных редакторов, которые полезны для редактирования файлов из сценария. Вот пример, вставляющий строку в каждый файл с расширением .txt в / mydata, с помощью ed:

#!/bin/bash for file in /mydata/*.txt; do printf '%s\n' 0a 50 . w | ed -s "$file" done

Это будет обрабатывать все виды нечетных символов в именах файлов тоже, в отличие от всех примеров, использующих for -loops с ls в ответах, данных до сих пор.

Вот ссылка, описывающая, как использовать ed: http://bash-hackers.org/wiki/doku.php?id=howto : edit-ed

Для того, чтобы справиться с bash, я настоятельно рекомендую прочитать http://bash-hackers.org/wiki/doku.php?id=howto:edit-ed

3
ответ дан 27 July 2018 в 01:41

Сложно добавить текст в конец файлов. Для BASH: echo 50 >> file.txt добавит 50 в конец файла file.txt. Оберните это в цикле for так: for $FILE in 'ls' do echo 50 >> $FILE; done; for $FILE in * do echo 50 >> $FILE; done; будет перебирать все файлы в текущем каталоге, добавляя 50 до конца. Обратите внимание, что одиночные кавычки на самом деле `, но это индикатор для разметки кода здесь ... blech. Чтобы добавить его в начало каждого файла, создайте в него временный файл и эхо 50, а затем повторите его содержимое. Затем переименуйте файл, чтобы перезаписать оригинал.

#!/bin/bash echo "Adding 50 to each file in current directory." for $FILE in * do [[ -f "$i" ]] || continue echo "50" >> tmp cat "$FILE" >> tmp mv tmp "$FILE" done

Это должно сработать, но запустите его в тестовом каталоге перед чем-то важным.

Edit: Обновлен скрипт как в комментарии Махеша

1
ответ дан 27 July 2018 в 01:41

По существу вам нужно перебирать каждый текстовый файл в каталоге, а затем добавлять в начало маленькую строку. Это не сложно, если вы разделите его на два шага.

Чтобы добавить строку в начало файла, формат будет таким:

echo "50 $( cat file.txt )" > file.txt

Если вы получаете cannot overwrite existing file, вам нужно отключить noclobber

set +o noclobber

Теперь вам просто нужно отбросить это в цикле, который прокручивает файлы, которые вы хотите изменить.

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "${FILE}" done

Если это выведет все файлы, которые вы хотите правильно изменить, добавьте команду для изменения файлов (как показано ниже). Если нет, измените инструкцию grep до тех пор, пока она не будет соответствовать тому, что вам нужно.

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}" done

И если вы хотите, чтобы это было сделано в одной строке:

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}"; done

Edit

Если вы хотите, чтобы 50 в своей собственной строке, используйте printf вместе с \n вместо эха, как показано ниже.

for FILE in $( ls /mydata/ | grep txt$ ) ; do printf "50\n$( cat ${FILE} )" > "${FILE}"; done
2
ответ дан 27 July 2018 в 01:41

С тех пор как вы спросили, commandlinefu.com перечисляет кучу команд и трюков для использования в оболочке, и в нем много материала об обработке текстовых файлов.

2
ответ дан 31 July 2018 в 12:18

Чтобы отредактировать файл, вам нужен редактор. ed и ex - примеры командных редакторов, которые полезны для редактирования файлов из сценария. Вот пример, вставляющий строку в каждый файл с расширением .txt в / mydata, с помощью ed:

#!/bin/bash for file in /mydata/*.txt; do printf '%s\n' 0a 50 . w | ed -s "$file" done

Это будет обрабатывать все виды нечетных символов в именах файлов тоже, в отличие от всех примеров, использующих for -loops с ls в ответах, данных до сих пор.

Вот ссылка, описывающая, как использовать ed: http://bash-hackers.org/wiki/doku.php?id=howto : edit-ed

Для того, чтобы справиться с bash, я настоятельно рекомендую прочитать http://bash-hackers.org/wiki/doku.php?id=howto:edit-ed

3
ответ дан 31 July 2018 в 12:18

Сложно добавить текст в конец файлов. Для BASH: echo 50 >> file.txt добавит 50 в конец файла file.txt. Оберните это в цикле for так: for $FILE in 'ls' do echo 50 >> $FILE; done; for $FILE in * do echo 50 >> $FILE; done; будет перебирать все файлы в текущем каталоге, добавляя 50 до конца. Обратите внимание, что одиночные кавычки на самом деле `, но это индикатор для разметки кода здесь ... blech. Чтобы добавить его в начало каждого файла, создайте в него временный файл и эхо 50, а затем повторите его содержимое. Затем переименуйте файл, чтобы перезаписать оригинал.

#!/bin/bash echo "Adding 50 to each file in current directory." for $FILE in * do [[ -f "$i" ]] || continue echo "50" >> tmp cat "$FILE" >> tmp mv tmp "$FILE" done

Это должно сработать, но запустите его в тестовом каталоге перед чем-то важным.

Edit: Обновлен скрипт как в комментарии Махеша

1
ответ дан 31 July 2018 в 12:18

По существу вам нужно перебирать каждый текстовый файл в каталоге, а затем добавлять в начало маленькую строку. Это не сложно, если вы разделите его на два шага.

Чтобы добавить строку в начало файла, формат будет таким:

echo "50 $( cat file.txt )" > file.txt

Если вы получаете cannot overwrite existing file, вам нужно отключить noclobber

set +o noclobber

Теперь вам просто нужно отбросить это в цикле, который прокручивает файлы, которые вы хотите изменить.

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "${FILE}" done

Если это выведет все файлы, которые вы хотите правильно изменить, добавьте команду для изменения файлов (как показано ниже). Если нет, измените инструкцию grep до тех пор, пока она не будет соответствовать тому, что вам нужно.

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}" done

И если вы хотите, чтобы это было сделано в одной строке:

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}"; done

Edit

Если вы хотите, чтобы 50 в своей собственной строке, используйте printf вместе с \n вместо эха, как показано ниже.

for FILE in $( ls /mydata/ | grep txt$ ) ; do printf "50\n$( cat ${FILE} )" > "${FILE}"; done
2
ответ дан 31 July 2018 в 12:18

С тех пор как вы спросили, commandlinefu.com перечисляет кучу команд и трюков для использования в оболочке, и в нем много материала об обработке текстовых файлов.

2
ответ дан 2 August 2018 в 04:20

Чтобы отредактировать файл, вам нужен редактор. ed и ex - примеры командных редакторов, которые полезны для редактирования файлов из сценария. Вот пример, вставляющий строку в каждый файл с расширением .txt в / mydata, с помощью ed:

#!/bin/bash for file in /mydata/*.txt; do printf '%s\n' 0a 50 . w | ed -s "$file" done

Это будет обрабатывать все виды нечетных символов в именах файлов тоже, в отличие от всех примеров, использующих for -loops с ls в ответах, данных до сих пор.

Вот ссылка, описывающая, как использовать ed: http://bash-hackers.org/wiki/doku.php?id=howto : edit-ed

Для того, чтобы справиться с bash, я настоятельно рекомендую прочитать http://bash-hackers.org/wiki/doku.php?id=howto:edit-ed

3
ответ дан 2 August 2018 в 04:20

Сложно добавить текст в конец файлов. Для BASH: echo 50 >> file.txt добавит 50 в конец файла file.txt. Оберните это в цикле for так: for $FILE in 'ls' do echo 50 >> $FILE; done; for $FILE in * do echo 50 >> $FILE; done; будет перебирать все файлы в текущем каталоге, добавляя 50 до конца. Обратите внимание, что одиночные кавычки на самом деле `, но это индикатор для разметки кода здесь ... blech. Чтобы добавить его в начало каждого файла, создайте в него временный файл и эхо 50, а затем повторите его содержимое. Затем переименуйте файл, чтобы перезаписать оригинал.

#!/bin/bash echo "Adding 50 to each file in current directory." for $FILE in * do [[ -f "$i" ]] || continue echo "50" >> tmp cat "$FILE" >> tmp mv tmp "$FILE" done

Это должно сработать, но запустите его в тестовом каталоге перед чем-то важным.

Edit: Обновлен скрипт как в комментарии Махеша

1
ответ дан 2 August 2018 в 04:20

По существу вам нужно перебирать каждый текстовый файл в каталоге, а затем добавлять в начало маленькую строку. Это не сложно, если вы разделите его на два шага.

Чтобы добавить строку в начало файла, формат будет таким:

echo "50 $( cat file.txt )" > file.txt

Если вы получаете cannot overwrite existing file, вам нужно отключить noclobber

set +o noclobber

Теперь вам просто нужно отбросить это в цикле, который прокручивает файлы, которые вы хотите изменить.

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "${FILE}" done

Если это выведет все файлы, которые вы хотите правильно изменить, добавьте команду для изменения файлов (как показано ниже). Если нет, измените инструкцию grep до тех пор, пока она не будет соответствовать тому, что вам нужно.

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}" done

И если вы хотите, чтобы это было сделано в одной строке:

for FILE in $( ls /mydata/ | grep txt$ ) ; do echo "50 $( cat ${FILE} )" > "${FILE}"; done

Edit

Если вы хотите, чтобы 50 в своей собственной строке, используйте printf вместе с \n вместо эха, как показано ниже.

for FILE in $( ls /mydata/ | grep txt$ ) ; do printf "50\n$( cat ${FILE} )" > "${FILE}"; done
2
ответ дан 2 August 2018 в 04:20

Поскольку вы спросили, commandlinefu.com перечисляет кучу команд и трюков для использования в оболочке, и в нем много материала о манипуляциях с текстовыми файлами.

2
ответ дан 6 August 2018 в 04:25

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

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