bash - 读取输入参数并使用 xargs 传递给 sed
问题描述
我有两个文件,文件 1 和文件 2:我想在每个函数的开头添加一个日志,以了解它是从哪个文件执行的:
文件1:
function one(){
}
function two(){
}
文件2:
function one(){
}
function two(){
}
我正在尝试列出文件,xargs
用于将文件发送到sed
以查找模式并在匹配后添加日志
ls file* | xargs sed '/function /a $.log("File");'
输出:
function one(){
$.log("File");
}
function two(){
$.log("File");
}
function one(){
$.log("File");
}
function two(){
$.log("File");
}
现在我需要使用文件名作为内部变量sed
,但在审查中xargs --help
,sed --help
我不知道如何解决这个问题。
是否有对sed
可在命令中使用的正在处理的文件的引用?就像是
ls file* | xargs sed '/function /a $.log("$INPUT_REFERENCE");'
预期输出:
function one(){
$.log("File1");
}
function two(){
$.log("File1");
}
function one(){
$.log("File2");
}
function two(){
$.log("File2");
}
解决方案
下面的代码应该实现你所需要的,虽然我没有完全理解你想要实现的语义,因为function foo()
代码将被它的下一个声明覆盖(在同一个文件中)。您正在寻找的是 xargs 的-I <string>
:
$ cat foo.sh
function one(){
}
function two(){
}
$ touch File{1..2}
$ ls File* | xargs -I@ sed $'/function /a\$.log("@");' foo.sh
function one(){
$.log("File1");
}
function two(){
$.log("File1");
}
function one(){
$.log("File2");
}
function two(){
$.log("File2");
}
上面的 Mind 使用 GNU sed,如果你使用的是 macosx,你需要在gsed
那里使用。
推荐阅读
- vue.js - 无法让 eslint-plugin-graphql 注意到已弃用的字段
- c - 如何在 C 中调用一个采用匿名结构的函数?
- python - Python从列日期中删除AM和PM
- request - YouTube API | 您如何可靠地找到频道的用户名或频道 ID?
- java - 空对象引用上的 iText Border.getWidth()'
- android - Android 签名密钥更改(不是 Play 商店分布式应用程序)
- r - R Selenium 无法找到元素返回错误 Selenium 消息:无法找到元素
- google-cloud-platform - Google Cloud Scheduler 的权限被拒绝
- javascript - 如何从网站上的用户那里获取某些输入并将这些值作为特定参数传递给我的 javascript 函数?
- go - dep 注入的模拟接口返回类型