2016-03-24 4 views
3

У меня есть скрипт, который изменяет строки в файлах. Что отлично работает, но, следовательно, файлы будут доступны только для чтения. Я пробовал изменить wq на wq! (как я бы сделал в VI), но это, по-видимому, не влияет. Я также пробовал «zz», который тоже ничего не делал.Мне нужен мой скрипт для редактирования и принудительной записи файлов только для чтения.

Я ценю любую помощь; Спасибо.

debug=false 

## *****Put file name in quotes****** 
declare -a arr=("UF19905217" "UG19905218") 

##Put date in DDMMYYYY format for the date the message was original processed. 
DATE="25082015" 

## now loop through the above array 
for i in "${arr[@]}" 
do 
    #if "$debug; then 
     echo "Fix file named: Inbound_$i.msg" 
     MSG="Inbound_$i.msg" 
    #fi 

    if [ ! -d "$MSG" ]; then 
    # Enter what you would like changed here. You can copy and paste this command for multiple changes 

     #DATATYPE 
     printf "%s\n" ',s/<DataType>EDI<\/DataType>/<DataType>830<\/DataType>/g' wq | ed -s /data1/Inbound/$DATE/$MSG   

     echo "Complete" 
    else 
      echo "Message not found or errored!" 
    fi 

done 
+0

Использование 'chmod' для изменения прав доступа к файлам, прежде чем (и после), вы должны редактировать их? –

+1

Любые конкретные причины, по которым вы не используете 'sed'? – tripleee

+0

Вы будете многократно благодарить себя за переключение на тривиально машиночитаемый формат даты YYYYMMDD. – tripleee

ответ

0

Если у вас есть доступ на запись в каталог, содержащий файл, вы можете удалить их перед их переписыванием. Если у вас есть доступ к GNU sed, то это будет делать sed -i.

Я не знаком с ed, но я думаю, что следующая команда sed бы эквивалент вашей команды:

sed -i 's/<DataType>EDI<\/DataType>/<DataType>830<\/DataType>/g' /data1/Inbound/$DATE/$MSG 

Кроме того, если вы не являетесь владельцем файла, каталог не должен у вас установлен липкий бит или вы не сможете удалить файл.

+0

Привет, Аарон. Я мог бы, но проблема в том, что все файлы теперь будут доступны только для чтения. То, что мне нужно, - это решение, которое может заставить писать, даже если они доступны только для чтения. Однако я ценю это предложение. – FrankCapone

+0

Затем вы должны исправить свой титул (который упоминает принудительное завершение, а не форсировать запись) и, возможно, будет немного более описательным в вашем вопросе. Я думаю, что вы можете столкнуться с ограничением только для чтения, прочитав, удалив и переписав файлы, я обновлю свой ответ, если я проверю это решение. – Aaron

+0

Yup it works, и это делается в один шаг с 'sed -i'. – Aaron

0

Добавьте это в .vimrc:

" Allow saving of files as sudo when I forgot to start vim using sudo. 
cmap w!! w !sudo tee > /dev/null % 

И затем использовать ": ш !!" а затем «: д» вместо «: WQ»

Для объяснения команды см this question