2个文件:
在1.txt
中a
$test$
b
$test$
c
在2.txt
中1
2
我想要的是什么:
a
1
b
2
c
我更喜欢Windows BAT
脚本,但是像sed
这样的单个Unix可执行文件是可以的。
更新:
@Magoo的解决方案有效,除了文件2中每行的第一个字符消失了:(。
@ Aacini的代码不起作用。不复制文件1中的整行,只是第一个单词。它会复制文件2中的整行。
这是我用来测试它的数据。我正在用2.txt中的每一行替换1.txt中的“URL”:
File 1.txt
File Name: 01 - AM FM.flac (FLAC)
File Size: 33.12 MiB (34729455 bytes)
Duration: 00:04:55.173
Audio: FLAC 940 Kbps 44.1 KHz 16 bits 2 channels
asdfsfd URL sdfasdf
File Name: 08 - Chick Habit.flac (FLAC)
File Size: 15.89 MiB (16664220 bytes)
Duration: 00:02:09.093
Audio: FLAC 1 023 Kbps 44.1 KHz 16 bits 2 channels
asfsdf URL asdfsadf
文件2.txt
[sdfd=http://aaaaaaaa/][IMG]http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.jpg[/IMG][/URL]
[sdfdsfd=http://bbbbbbbbbb/][IMG]httbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.jpg[/IMG][/URL]
答案 0 :(得分:1)
{
// dir is white your temp build files put
dir: 'build-temp-dir',
// one module for one minified javascript file
modules: [{
// module names are relative to baseUrl
name: 'mylib/module-entry1',
// include something else
include: ['mylib/module2']
},
// other one minified javascript file
{
name: 'mylib/module-entry2',
// if you don't want repetitive code put in the two out files
// just exclude it
exclude: ['mylib/module-entry1']
}]
答案 1 :(得分:0)
为了帮助您入门,请考虑以下事项:
sed -e '/\$test\$/{r file2' -e 'd}' file1
根据您的要求逻辑不完整,因为目前它将在文件2.txt中的交替$test$
处粘贴1.txt中的所有内容。所以你将拥有:
a
1
2
b
1
2
c
提示:此外,您可以设置逻辑以仅读取2.txt中的交替行。可以是通过将2.txt循环到临时变量中的脚本,并且在每个循环中使用上面的sed
命令来替换变量中的值。
答案 2 :(得分:0)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "targetstring=$test$"
:: read second file and store contents in $linenumber
FOR /f "tokens=1*delims=[]" %%a IN ('find /n /v "" q34428552_2.txt') DO SET "$%%a=%%b"
SET /a $=0
:: now read-file-and-substitute
(
FOR /f "delims=" %%a IN (q34428552.txt) DO (
IF "%%a"=="%targetstring%" (
SET /a $+=1
CALL ECHO(%%$!$!%%
) ELSE ECHO %%a
)
)>u:\newfile.txt
GOTO :EOF
我使用了名为q34428552.txt
&的文件q34428552_2.txt
包含我的测试数据。
制作u:\ newfile.txt
基本上,将替换文件读入变量名称$1
,$2
等。
然后读取主文件;如果该行与目标不匹配,但如果匹配,则使用$
替换变量$ count 的内容作为计数器。
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed -e '/pattern/R file2' -e '//d' file1
这将使用file2中的一行顺序替换file1中的每个pattern
。
答案 4 :(得分:0)
使用awk(针对此需求的最佳套件与shell脚本或sed相比)
awk 'FNR==NR{T[NR]=$0;next}/\$test\$/{print T[++i];next}1' 2.txt 1.txt
文件顺序很重要
答案 5 :(得分:0)
使用JREPL.BAT - a regular expression text processing utility非常简单。 JREPL是纯脚本(混合JScript /批处理),可以在XP之后的任何Windows机器上本机运行。
以下代码将解决您的第二个示例(替换网址)
jrepl "URL" "stdin.AtEndOfStream?$0:stdin.ReadLine()" /j /f "file1.txt" <"file2.txt" /o -
"URL"
要搜索的文字。您可以添加正则表达式术语以使搜索非常具体。如上所述,它甚至会在一个单词的中间替换URL。
"stdin.AtEndOfStream?$0:stdin.ReadLine()"
替换表达式。如果我们已经到达file2的末尾,那么它将替换为自己的搜索,否则它将替换为file2中的下一行。
/j
指定将第二个参数视为JScript表达式
/f "file1.txt"
指定要修改的输入文件
<"file2.txt"
指定找到替换字符串的文件
/o -
指定输出是否覆盖原始文件
请记住,JREPL本身就是一个批处理脚本,因此如果您在另一个批处理脚本中使用该命令,则必须使用call jrepl
。
使用jrepl /?
(或jrepl /??
如果您需要分页帮助)可以获得完整文档。