简体   繁体   中英

Bash script using sed to append line at end of file if line doesn't exist on mac

I need to use sed instead of echo and append to the end of a file: list.txt

list.txt has a list of directories:

/desktop/test1/file1

/desktop/test2/file1

I need to append another directory with slashes to this list.txt at the end of the file if that directory already doesn't exist in the list. Such as: /desktop/file1 The result should be:

/desktop/test1/file1

/desktop/test2/file1

/desktop/file1

I've tried using this script but am running into syntax errors with the a command which I've been seeing could be a mac issue?:

#!/bin/bash
if ! grep -q "/desktop/file1" user/admin/Desktop/list.txt; then
    sed -i -e '$a/desktop/file1' user/admin/Desktop/list.txt
fi

The a command is used as a\ in standard sed and should be followed by a newline and the text to be written. The form you use is a GNU extension. So a standard sed command to do the job could be:

sed -i '' '$a\
/desktop/file1' user/admin/Desktop/list.txt

or

sed -i '' '$a\'$'\n''/desktop/file1' user/admin/Desktop/list.txt

using ANSI-C quoting in bash.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM