상용구를 자동화하는 스크립트를 작성 중입니다. 여기에 문자열을 추가합니다.
"compile": "browserify js/main.js > ./dist/bundle.js -t babelify",
"watch": "watchify js/*.js -o ./dist/bundle.js -d",
sed를 사용하여 문자열을 찾았습니다."스크립트"그리고 이렇게 붙였습니다.
sed '/"scripts"/a "compile": "browserify js/main.js > ./dist/bundle.js -t babelify",\n "watch": "watchify js/*.js -o ./dist/bundle.js -d",' package.json
따라서 명령의 구문은 다음과 같습니다.
sed '/pattern/a' input
내 문제는 이 명령이 입력 파일을 변경하지 않으며 출력을 파일에 쓸 수도 없다는 것입니다. 예를 들어,
sed '/pattern/a' input > output.txt
내가 뭘 잘못했나요?
표적:
입력 파일 ( package.json
):
{
"name": "torrent-search-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"torrent-search-api": "^2.1.4"
},
"devDependencies": {
"@babel/core": "^7.16.7",
"@babel/preset-env": "^7.16.8",
"babelify": "^10.0.0",
"browserify": "^17.0.0"
}
}
$ <command> package.json
산출:
cat package.json
{
"name": "torrent-search-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"compile": "browserify js/main.js > ./dist/bundle.js -t babelify",
"watch": "watchify js/*.js -o ./dist/bundle.js -d",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"torrent-search-api": "^2.1.4"
},
"devDependencies": {
"@babel/core": "^7.16.7",
"@babel/preset-env": "^7.16.8",
"babelify": "^10.0.0",
"browserify": "^17.0.0"
}
}
답변1
객체에 단일 키-값 쌍을 추가하려면 다음을 수행하십시오 scripts
.
jq --arg key 'compile' --arg value 'browserify js/main.js > ./dist/bundle.js -t babelify' \
'.scripts += { ($key): $value }' file
키와 값을 모두 추가하려면 정확히 동일한 표현식을 통해 jq
출력을 다시 파이프하되 내부 $key
및 $value
변수에 대한 다른 값을 사용하세요.
jq --arg key 'compile' --arg value 'browserify js/main.js > ./dist/bundle.js -t babelify' \
'.scripts += { ($key): $value }' file |
jq --arg key 'watch' --arg value 'watchify js/*.js -o ./dist/bundle.js -d' \
'.scripts += { ($key): $value }'
문제의 파일이 주어지면 이는 다음과 같이 생성됩니다.
{
"name": "torrent-search-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"compile": "browserify js/main.js > ./dist/bundle.js -t babelify",
"watch": "watchify js/*.js -o ./dist/bundle.js -d"
},
"author": "",
"license": "ISC",
"dependencies": {
"torrent-search-api": "^2.1.4"
},
"devDependencies": {
"@babel/core": "^7.16.7",
"@babel/preset-env": "^7.16.8",
"babelify": "^10.0.0",
"browserify": "^17.0.0"
}
}
두 번째 명령의 출력을 jq
새 파일로 리디렉션한 다음 평소와 같이 파일을 이전 이름으로 이동할 수 있습니다.
$ARGS.named
명령줄에서 명명된 변수를 포함하는 객체인 것을 이해한다면 분명히 두 가지를 동시에 수행할 수 있습니다 .
jq --arg compile 'browserify js/main.js > ./dist/bundle.js -t babelify' \
--arg watch 'watchify js/*.js -o ./dist/bundle.js -d' \
'.scripts += $ARGS.named' file
결과는 두 가지 더 간단한 명령의 파이프라인을 사용하는 것과 동일하며 스크립트 및 기타 상황에 따라 이 작업을 수행하거나 위에 표시된 대로 수행할 수 있습니다.