【问题标题】:Add the contents of one file at the end of each line of another file在另一个文件的每一行末尾添加一个文件的内容
【发布时间】:2018-06-15 16:24:46
【问题描述】:

我想添加一个包含密码的文件的内容并将其添加到另一个包含电子邮件列表的文件中,我希望格式为:

email@example.com:examplepass

我尝试过使用 Python 脚本执行此操作,但到目前为止没有运气,使用 sed 尝试过它并且它有效,但不是我想要它执行的操作。我创建了一个新的环境变量,并设置如下:

export FILES=$(cat pass.txt)

然后我使用了命令

sed 's/$/$($FILES)/' test.txt > test5000.txt

将每行的每个密码添加到电子邮件列表中,但它会打印出来

email@example.com:$FILES

【问题讨论】:

  • 你能举一个两个文件的小例子吗?
  • 看起来不像是一个 python 问题。但是,如果您在简单的引号中使用$FILES,则不会对其进行评估。你可以试试sed 's/\$/\$($FILES)/' test.txt > test5000.txt
  • man paste。似乎正是您想要的。
  • @Jean-FrançoisFabre "在每行的末尾"
  • 请将这两个文件添加到您的问题中,并将这些文件的所需输出添加到您的问题中。

标签: python file sed


【解决方案1】:

很确定你只想要paste -d: test.txt pass.txt

【讨论】:

    【解决方案2】:

    它适用于sed,但用单引号括起来可以避免评估环境。多变的。所以用双引号括起来。另外,替换时不需要重复 $。

    sed "s/\$/($FILES)/" test.txt > test5000.txt 
    

    警告:在替换中很有可能会解释一些密码字符(例如,像 \1 甚至引号之类的向后引用呢!!...)所以当你不这样做时,这个解决方案实际上并不可行不知道$FILES里有什么

    Python 版本(我推荐这个解决方案),未经测试但对它很有信心,并且万无一失,即使密码文件包含特殊字符:

    with open('pass.txt') as fr:
        passwords = fr.read()
    with open("test.txt") as fr, open('test50000.txt', "w") as fw:
       fw.writelines('{}{}\n'.format(t.rstrip(),passwords) for t in fr)
    

    首先,读取密码文件,然后打开输入和输出并写入由用户名(不带行终止符)+密码+行终止符组成的行,以提高速度。

    【讨论】:

    • idk 关于 python 但不要使用该 sed 脚本,因为它不会;不会做你想做的事,如果它试图这样做,它会破坏你的输出,因为密码文件中有各种字符。这是paste 要做的工作,请参阅stackoverflow.com/a/48120730/1745001
    • @EdMorton 我相信你的判断。相信我对不会破坏任何东西的 python 代码的判断。我会编辑。
    • 我相信你,但是写一个 python 脚本来做paste file1 file2 的工作有什么意义呢?还是在做一些不同的事情?
    • 如果您已经在 python 环境中并且想要编写可移植代码(例如:windows),您可能希望避免使用外部命令。
    • 足够公平,因为 OP 确实使用 python 和 sed 标记了问题,但没有使用 unixshell 或其他任何通常包含 paste 或其他 UNIX 命令的东西。
    猜你喜欢
    • 1970-01-01
    • 2016-12-23
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多