why sed replace + redirection deletes my file?

前端 未结 3 1339
执笔经年
执笔经年 2021-01-13 06:57

I am using sed to search and replace two strings in a file in bash (GNU sed)

This is the file after

-rw-r--r-- 1 websync www-data 4156 mar 27 12:56 /         


        
相关标签:
3条回答
  • 2021-01-13 07:04

    sed reads your files in as a stream and outputs a stream as well. As soon as you perform the redirection into your file the contents are overwritten, and since that file is being read as a stream, it hasn't even started being read by sed yet. When sed does start reading the file it is empty so it finishes immediately with no output.

    Use -i, to do an in-place edit, instead:

    sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php
    
    0 讨论(0)
  • 2021-01-13 07:07

    This is normal. you can't read and write to the same file in a pipeline like this. (this will fail with other utilities than sed).

    Use the in-place flag -i instead:

    sed -i 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php
    
    0 讨论(0)
  • 2021-01-13 07:08

    The redirection opens the file for output, truncating it. This happens simultaneously to sed opening it for reading, so sed sees the truncated version. You should redirect your output to a different file to avoid clobbering your input, or use sed's in-place editing mode instead of using redirection:

    sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php

    0 讨论(0)
提交回复
热议问题