일치하는 줄을 포함하여 일치하는 줄부터 끝까지 모든 줄을 삭제합니다.

일치하는 줄을 포함하여 일치하는 줄부터 끝까지 모든 줄을 삭제합니다.

이것은 EXPORTER_JAR_PATH파일 끝까지 " "를 포함하는 모든 줄을 제거하려는 파일 입니다.

more ambari-agent.ini
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific

export EXPORTER_JAR_PATH=/tmp/hgt.yml
[server]
hostname=master.sys65.com
url_port=8440
secured_url_port=8441
connect_retry_delay=10
max_reconnect_retry_delay=30

EXPORTER_JAR_PATH 내 해결책은 다음과 같습니다. - 끝까지 포함하는 행에서 행을 제거하십시오.

sed '1,/EXPORTER_JAR_PATH/!d' ambari-agent.ini
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific

export EXPORTER_JAR_PATH=/tmp/hgt.yml

라인에서 볼 수 있듯이 -Export EXPORTER_JAR_PATH=/tmp/hgt.yml

아직도 존재하는데, 우리가 어디서 잘못됐나요?

예상 출력

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific

답변1

sed '/EXPORTER_JAR_PATH/,$d' file

그러면 하위 문자열이 포함된 첫 번째 줄부터 EXPORTER_JAR_PATH파일 끝까지( $주소 파일의 끝)까지 모든 줄이 삭제됩니다.

이 명령의 목적은 라인 1과 문자열(포함)을 포함하는 라인 사이에 있지 않은 모든 라인을 삭제하는 것입니다. 즉, 하위 문자열이 포함된 행은 EXPORTER_JAR_PATH삭제되지 않습니다.

또는 Paul_Pendant와 mosvy가 아래 댓글에서 지적했듯이,

sed -n '/EXPORTER_JAR_PATH/q;p' file

스크립트가 종료되는 줄에 p도달할 때까지 각 줄을 명시적으로 인쇄합니다 . EXPORTER_JAR_PATH-n옵션은 일반 기본 출력을 비활성화하므로 문자열이 포함된 줄은 인쇄되지 않습니다. 이는 전체 파일을 읽을 필요가 없다는 장점이 있습니다 sed(그러나 이 특별한 경우에는 파일이 너무 짧기 때문에 큰 차이가 없습니다).

awk이에 상응하는 것은 다음과 같습니다.

awk '/EXPORTER_JAR_PATH/ { exit } { print }' file

아니면 더 짧게,

awk '/EXPORTER_JAR_PATH/ { exit }; 1' file

관련 정보