Добавить содержимое наследственного документа к файлу, только если этого содержимого еще нет в этом файле

Порты 80 и 443 являются стандартными портами для http и https соответственно. Если вы используете эти порты для своего приложения (вместо порта 5678), вам не нужно указывать номер порта в своих URL-адресах.

2
13.06.2018, 20:55
2 ответа

Если документ здесь должен быть добавлен только в том случае, если его нет, вы можете использоватьgrep:

cat <<-"EOF1" > myPath/myFile.append
    content...
EOF1
if ! grep -F -q -f myPath/myFile{.append,}; then
    cat myPath/myFile.append >> myPath/myFile
fi

Чтобы понять это, рассмотрим следующее.

  • grep -F -q -f myPath/myFile{.append,}расширяется оболочкой до grep -F -q -f myPath/myFile.append myPath/myFile.

  • Команда grepищетmyPath/myFile(файл, в который при необходимости следует добавить текст )любую фиксированную строку (-F), содержащуюся вmyPath/myFile.append(файле, содержащем текст для добавления ), чтение один шаблон в строке(-f)и указывает, находит ли он что-либо, только по своему коду выхода без вывода(-q).

  • Затем результат инвертируется !, так что часть thenблока ifвыполняется только в том случае, если grepничего не находит.

3
27.01.2020, 22:02

Por favor, no seleccione esta respuesta con el pulgar, sino la de Stephen, que marqué como correcta. Esto no es más que una variación más fácil de leer para mí.


Si el contenido del archivo de plantilla solo debe agregarse al archivo final si ninguno de ellos ya está presente en el archivo final, puede usargrep:

cat <<-"EOF1" > myPath/myTemplate
    content...
EOF1

if ! grep -F -q -f myPath/myFile myPath/myTemplate; then
    cat myPath/myTemplate >> myPath/myFile
fi

El comando grepbusca myPath/endFile.shcualquier cadena fija(-F)contenida en myPath/myTemplate, leyendo un patrón por línea (-f), e indica si encuentra alguno solo por su código de salida , sin salida(-q).

El resultado luego se niega !, de modo que el bloque thendel bloque if-thensolo se ejecutará si grepno coincide con nada en el archivo final.

Apéndice -códigos de salida:

Cuando finaliza un proceso, devuelve un código de salida, que es un número entero pequeño. Por convención, un código de salida de 0 indica éxito, no -cero indica falla o error:

  • grepdevuelve 0 cuando encuentra una coincidencia y 1 si no la encuentra.

  • ifusa el código de salida de su argumento para decidir qué hacer; si es 0, procesa el bloque then, de lo contrario, el bloque else(si lo hay ).

  • Una puntuación(!)cambia eso; El bloque thensolo se ejecuta si grep no coincide con nada (o encuentra un error ).

0
27.01.2020, 22:02

Теги

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